मैंने ऐसी कोई विशेषता नहीं देखी है, लेकिन मुझे लगता है कि यह संभव है। This article एमएसडीएन पर overrides
और new
कीवर्ड के उपयोग के माध्यम से संस्करण का वर्णन करता है।
संक्षेप में, सी # भाषा सुविधाओं से लैस है जो व्युत्पन्न कक्षाओं को विकसित करने और अभी भी संगतता बनाए रखने की अनुमति देते हैं। यह उदाहरण पूरी तरह से बेस-टू-व्युत्पन्न रिश्ते दिखाता है, लेकिन आधार वास्तव में आपके द्वारा संस्करण में आवश्यक इंटरफ़ेस को लागू करेगा। एक इंटरफ़ेस होने के बाद इस विधि के साथ एक और (पिछले संस्करण) इंटरफ़ेस की आवश्यकता होती है, साथ ही यह भी उपयोगी है।
एक इंटरफेस बनाने का उदाहरण है कि एक और की आवश्यकता है:
public interface IMyInterface
{
void FirstMethod();
}
public interface IMySecondInterface : IMyInterface
{
void SecondMethod();
}
वंशानुक्रम का उपयोग संगतता बनाए रखने के लिए का उदाहरण:
public class MyBase
{
public virtual string Meth1()
{
return "MyBase-Meth1";
}
public virtual string Meth2()
{
return "MyBase-Meth2";
}
public virtual string Meth3()
{
return "MyBase-Meth3";
}
}
class MyDerived : MyBase
{
// Overrides the virtual method Meth1 using the override keyword:
public override string Meth1()
{
return "MyDerived-Meth1";
}
// Explicitly hide the virtual method Meth2 using the new
// keyword:
public new string Meth2()
{
return "MyDerived-Meth2";
}
// Because no keyword is specified in the following declaration
// a warning will be issued to alert the programmer that
// the method hides the inherited member MyBase.Meth3():
public string Meth3()
{
return "MyDerived-Meth3";
}
public static void Main()
{
MyDerived mD = new MyDerived();
MyBase mB = (MyBase) mD;
System.Console.WriteLine(mB.Meth1());
System.Console.WriteLine(mB.Meth2());
System.Console.WriteLine(mB.Meth3());
}
}
ठीक है, भारी वोट "नहीं, लेकिन ..." रहा है। इस प्रकार मैं इसे लंबे समय तक दोषी ठहराऊंगा और मैं थक गया हूं। :) –
मैं थोड़ा और सोच रहा था कि यह कैसे काम कर सकता है। जब तक मैं गलत नहीं हूं, केवल उपभोक्ता संकलक को "इसका समर्थन" करना होगा। इंटरफ़ेस कंपाइलर केवल असेंबली में विशेषता जोड़ देगा, जबकि उपभोक्ता कंपाइलर कार्यान्वयन को लागू करने वाला एक होगा। यह लगभग (हालांकि तकनीकी रूप से नहीं) ITest1, ITest2, आदि को रोकने के लिए "कोड चीनी" होगा –
उपभोक्ता को यह निर्दिष्ट करना होगा कि यह किस संस्करण का उपयोग कर रहा है, लेकिन फिर आपको कुछ कठिनाइयां हैं। क्या होगा यदि आपका कोड दोनों संस्करणों का उपयोग करता है? तो आपके पास कक्षा 1 है: [इंटरफेसवर्सन (1)] आईटेस्ट और कक्षा 2: [इंटरफेसवर्सन (2)] आईटीएस्ट। फिर आप करते हैं "अगर (कक्षा 2 आईटीएस्ट है)" ... लेकिन कौन सा? ऐसा लगता है कि एक बार जब आप एक ही स्थान पर विशेषता का उपयोग करते हैं, तो आपको इसे हर जगह उपयोग करना होगा। कंपाइलर को यह सब ट्रैक रखना होगा और इसे आप पर मजबूर करना होगा। यह ITest1, ITest2 करने में आसान हो सकता है ... तो यह नई "सुविधा" विशेषता वास्तव में इसे और खराब कर सकती है। :) –