인스턴스가 참조로 전달되는 C#에서 확장 메서드를 만드는 것은 정말로 불가능합니까? 값 매개 변수가하는 ByRef 전달됩니다C# 확장 메서드에서 참조로 매개 변수를 전달할 수 있습니까?
Imports System.Runtime.CompilerServices
Module Module1
Sub Main()
Dim workDays As Weekdays
workDays.Add(Weekdays.Monday)
workDays.Add(Weekdays.Tuesday)
Console.WriteLine("Tuesday is a workday: {0}", _
CBool(workDays And Weekdays.Tuesday))
Console.ReadKey()
End Sub
End Module
<Flags()> _
Public Enum Weekdays
Monday = 1
Tuesday = 2
Wednesday = 4
Thursday = 8
Friday = 16
Saturday = 32
Sunday = 64
End Enum
Module Ext
<Extension()> _
Public Sub Add(ByRef Value As Weekdays, ByVal Arg1 As Weekdays)
Value = Value + Arg1
End Sub
End Module
참고 :
다음은 샘플 VB.NET 콘솔 응용 프로그램입니다.
그리고 (거의) C#에서 같은 :
using System;
namespace CS.Temp
{
class Program
{
public static void Main()
{
Weekdays workDays = 0;
workDays.Add(Weekdays.Monday); // This won't work
workDays.Add(Weekdays.Tuesday);
// You have to use this syntax instead...
// workDays = workDays | Weekdays.Monday;
// workDays = workDays | Weekdays.Tuesday;
Console.WriteLine("Tuesday is a workday: {0}", _
System.Convert.ToBoolean(workDays & Weekdays.Tuesday));
Console.ReadKey();
}
}
[Flags()]
public enum Weekdays : int
{
Monday = 1,
Tuesday = 2,
Wednesday = 4,
Thursday = 8,
Friday = 16,
Saturday = 32,
Sunday = 64
}
public static class Ext
{
// Value cannot be passed by reference?
public static void Add(this Weekdays Value, Weekdays Arg1)
{
Value = Value | Arg1;
}
}
}
나는 ref
키워드를 사용할 수 없기 때문에 Add
확장 메서드는 C#으로 작동하지 않습니다. 이 문제를 해결할 수있는 방법이 있습니까?
그냥 완성을 위하여 : 당신은'Monday' 두 번 추가하는'Tuesday'를 추가처럼 동작 것을 원하지 않는다면 플래그 열거 형의 값을 "추가"하는 올바른 방법 '값 = 값 또는 Arg1'입니다. 플래그를 제거하는 올바른 방법은'Value = (Value 또는 Arg1) Xor Arg1'입니다. – LWChris