क्या सी # में एक विस्तार विधि बनाना वास्तव में असंभव है जहां उदाहरण संदर्भ के रूप में पारित किया गया है?सी # एक्सटेंशन तरीके संदर्भ द्वारा पैरामीटर पास करने की अनुमति नहीं देता है?
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
नोट मूल्य पैरामीटर ByRef पारित हो जाता है:
यहां नमूने VB.NET सांत्वना अनुप्रयोग है।
और (लगभग) सी # में एक ही:
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;
}
}
}
Add
विस्तार विधि सी # में काम नहीं करता क्योंकि मैं ref
कीवर्ड का उपयोग नहीं कर सकते। क्या इसके समाधान की कोई युक्ति है?
बस पूरा होने की खातिर: सही तरीका करने के लिए एक झंडा enum के एक मूल्य "जोड़ें" 'मान = मूल्य या Arg1' जब तक आप चाहते हैं कि जोड़ने' Monday' दो बार 'Tuesday' जोड़ने की तरह बर्ताव करता है। ध्वज को हटाने का सही तरीका 'Value = (Value या Arg1) Xor Arg1' है। – LWChris