2012-12-28 32 views
5

पर पास करें, मुझे विधि में क्लास नाम की आवश्यकता है उदाहरण के लिए एक्स। इस बीच, मैं टाइप-सुरक्षा को खोना नहीं चाहता हूं और मैं अन्य डेवलपर्स को पास करने की अनुमति नहीं दूंगा विधि के लिए स्ट्रिंग (कक्षा का नाम)।टाइप-सुरक्षित रूप से किसी क्लास नाम को विधि

कुछ इस तरह:

void X(??? class) // --> don't know how 
{ 
var className = get the name of class // --> which I don't know how 
Console.WriteLine(className); 
} 

X(tblEmployee); //--> usage of X, where tblEmployee is a POCO class 

उत्तर

14

आप के लिए क्या देख रहे हैं एक एक Type, जो कक्षाओं के बारे में मेटाडेटा कहा जाता है।

आप किसी भी object उदाहरण पर typeof(class) या .GetType() विधि का उपयोग कर सकते हैं।

अलग-अलग typeof को स्थिर रूप से हल किया गया है और GetType रनटाइम पर हल किया गया है।

void X(Type type) 
{ 
    Console.WriteLine(type.FullName); 
} 

X(typeof(tblEmployee)); 
+0

के बाद से tblEmployee एक वर्ग नहीं एक वस्तु है, एक्स (tblEmployee.GetType()) गलत है क्योंकि GetType() वस्तुओं पर कहा जा सकता है है। इसके बजाय एक्स (टाइपोफ (tblEmployee)) सही है। – Alireza

+0

@Alireza क्षमा करें, मैंने सोचा कि यह कक्षा का एक उदाहरण था। फिक्स्ड। – Rotem

7

आप जेनरिक इस्तेमाल कर सकते हैं और FullName property of Type, जैसे:

void WriteClassName<TClass>(TClass item) 
    where TClass : class { 
    Console.WriteLine(item.GetType().FullName); 
} 

और फिर अपने आवश्यकताओं के अनुसार TClass पर contraints लागू होते हैं।

+0

हमें ऑब्जेक्ट टाइप करने की आवश्यकता है, न कि ऑब्जेक्ट। इस मामले में विधि प्रकार TClass की वस्तु स्वीकार करेगा। मुझे यह बात नहीं है कि हम यही चाहते हैं ... – Gaurav

1
void X(Type type) 
{ 
    if(type == typeof(DesiredType)) 
    { 
      Do Some Action 
    } 
}