2010-11-21 19 views
13

डब्ल्यूसीएफ आरआईए सेवाओं में AuthenticationBase कक्षा है। वर्ग परिभाषा निम्नानुसार है:नया() मतलब क्या है?

// assume using System.ServiceModel.DomainServices.Server.ApplicationServices 

public abstract class AuthenticationBase<T> 
    : DomainService, IAuthentication<T> 
    where T : IUser, new() 

new() इस कोड में क्या अर्थ है?

उत्तर

21

यह new constraint है।

यह निर्दिष्ट करता है कि Tabstract नहीं होना चाहिए और AuthenticationBase<T> वर्ग के लिए एक generic type argument के रूप में इस्तेमाल किया जा करने के लिए एक public parameterless constructor बेनकाब करना होगा।

+2

किशोर वीनी सुधार: सामान्य प्रकार * तर्क * के रूप में उपयोग करने के लिए एक प्रकार में उन सुविधाओं को अवश्य होना चाहिए * 'टी' सामान्य प्रकार * पैरामीटर * है, लेकिन वास्तव में उपयोग किया जाने वाला प्रकार, (उदाहरण के लिए 'ऑब्जेक्ट', 'int') प्रकार तर्क है। –

+1

@ जोन, विधिवत नोट किया गया, धन्यवाद :) –

7

नए() कीवर्ड का उपयोग करने के लिए कहा गया वर्ग के लिए परिभाषित करने के लिए एक डिफ़ॉल्ट कन्स्ट्रक्टर की आवश्यकता होती है। कीवर्ड के बिना, नया वर्ग() को संकलित करने की कोशिश कर संकलन नहीं करेगा।

उदाहरण के लिए, निम्न स्निपेट संकलित नहीं होगा। फ़ंक्शन पैरामीटर का एक नया उदाहरण वापस करने का प्रयास करेगा।

public T Foo <T>() 
// Compile error without the next line 
// where T: new() 
{ 
    T newInstance = new T(); 
    return newInstance; 
} 

यह एक सामान्य प्रकार की बाधा है। यह MSDN article देखें।

5

इसका मतलब है कि एक प्रकार सामान्य पैरामीटर T को भरने के लिए प्रयोग किया जाता है एक सार्वजनिक और parameterless निर्माता होना आवश्यक है। यदि प्रकार इस तरह के एक कन्स्ट्रक्टर को लागू नहीं करता है, तो इसका परिणाम संकलन-समय त्रुटि होगी।

new() सामान्य बाधा लागू किया जाता है, तो इस उदाहरण में, उस वर्ग या विधि (इस मामले में AuthenticationBase<T> वर्ग) निर्दिष्ट प्रकार का एक नया उदाहरण के निर्माण के लिए new T(); कॉल करने के लिए अनुमति देता है। प्रतिबिंब से कम कोई दूसरा तरीका नहीं है (इसमें System.Activator का उपयोग करना है, जो कि सामान्य प्रकार की एक नई वस्तु का निर्माण करने के लिए है।

संबंधित मुद्दे