2010-05-13 8 views
10

सी # 4.0 में, हमारे पास गतिशील प्रकार है, लेकिन गतिशील प्रकार ऑब्जेक्ट की स्थिर विधि कैसे शुरू करें?गतिशील प्रकार के साथ सी # 4.0 में स्थैतिक विधि कैसे शुरू करें?

नीचे कोड रन समय पर अपवाद उत्पन्न करेगा। गतिशील ऑब्जेक्ट सी # कक्षा से है, लेकिन यह डीएलआर के माध्यम से अन्य भाषाओं से ऑब्जेक्ट हो सकता है। बिंदु यह नहीं है कि स्थैतिक विधि का आह्वान कैसे करें, लेकिन गतिशील ऑब्जेक्ट की स्थिर विधि का आह्वान कैसे करें जो सी # कोड में नहीं बनाया जा सका।

class Foo 
{ 
    public static int Sum(int x, int y) 
    { 
     return x + y; 
    } 
} 

class Program 
{ 

    static void Main(string[] args) 
    { 
     dynamic d = new Foo(); 
     Console.WriteLine(d.Sum(1, 3)); 

    } 
} 

IMHO, गतिशील पाटने के सी # और अन्य प्रोग्रामिंग भाषा का आविष्कार किया है। कुछ अन्य भाषा है (उदा। जावा) प्रकार के बजाय ऑब्जेक्ट के माध्यम से स्थिर विधि का आह्वान करने की अनुमति देती है।

बीटीडब्ल्यू, सी # 4.0 का परिचय सी # 3.0 की तुलना में इतना प्रभावशाली नहीं है।

उत्तर

6

एक संभावित समाधान, प्रतिबिंब का उपयोग करने के लिए होगा।

dynamic d = new Foo(); 

var sum = (int)d.GetType() 
       .GetMethod("Sum") 
       .Invoke(d, new object[] { 1, 3 }); 
Console.WriteLine(sum); 
8

जबकि सी # इसका समर्थन नहीं करता है, डीएलआर करता है। आप Dynamitey

var staticContext = InvokeContext.CreateStatic ; 

Console.WriteLine(Dynamic.InvokeMember(staticContext(typeof(Foo)), "Sum", 1,3)); 
के साथ प्रोग्रामर रूप से डीएलआर कॉल तक पहुंच सकते हैं
संबंधित मुद्दे