मैंने सोचा कि मैंने यह नाखुश किया है, और फिर मैं काम पर कुछ स्रोत देखता हूं और सोच रहा हूं कि एमएसडीएन से जो कुछ मैंने पढ़ा है और जो मैं स्रोत में देख रहा हूं, उसके इतने सारे विरोधाभास क्यों हैं। ...सी # वर्चुअल और ओवरराइड कीवर्ड
मेरी समझ यह है कि वर्चुअल कीवर्ड विधि घोषणाओं में उपयोग किया जा सकता है ताकि किसी भी व्युत्पन्न कक्षाओं को इसे ओवरराइड करने की अनुमति मिल सके।
:ओवरराइड कीवर्ड तो व्युत्पन्न वर्ग जब सुपर क्लास 'आभासी विधि को लागू करने में प्रयोग की जाने वाली
उदाहरण के लिए की आवश्यकता होगी ....:
public abstract class A
{
public virtual string GetName();
}
public class B:A
{
//assume there are some defined properties.
public override string GetName()
{
return FirstName;
}
}
मैं कुछ प्रश्न हैं
1) क्या वर्चुअल के रूप में किसी विधि को परिभाषित करना वास्तव में आवश्यक है यदि इसका कोई कार्यान्वयन नहीं है? निश्चित रूप से वर्चुअल और ओवरराइड के उपयोग के बिना इसे उप-वर्ग में ओवरराइट किया जा सकता है?
2) यदि (1) गलत है, मैं सही सोच है कि हर आभासी विधि इसे प्रयोग उपवर्ग में अधिरोहित किया जाना चाहिए में हूँ ....
संपादित करें:
आप सही मेरे कोड रहे हैं सबसे पहले वें
public abstract class RequestHandler<TRequest, TResponse> : RequestHandler, IRequestHandler<TRequest>, IRequestHandler, IDisposable, ITypedRequestHandler
where TRequest : global::Agatha.Common.Request
where TResponse : global::Agatha.Common.Response, new()
{
protected RequestHandler();
public virtual void AfterHandle(TRequest request);
public virtual void BeforeHandle(TRequest request);
public override Response CreateDefaultResponse();
public TResponse CreateTypedResponse();
public override Response Handle(Request request);
public abstract Response Handle(TRequest request);
}
ऊपर नहीं करता संकलक शिकायत करने के लिए कारण ...
आपका उदाहरण संकलित नहीं करता है ("' एगेटनाम() 'को शरीर घोषित करना चाहिए क्योंकि इसे 'सार', 'बाहरी' या 'आंशिक'' चिह्नित नहीं किया गया है)। – dtb
क्या आपकी कक्षा ए संकलन अपने अनुपस्थित सार को नोट करेगा? – V4Vendetta
निश्चित रूप से कक्षा ए में विधि सार्वजनिक सार स्ट्रिंग GetName() होना चाहिए; – Vedran