मैं सी # प्रोग्रामर डी भाषा में नया हूं। मैं डी प्रोग्रामिंग भाषा में ओओपी के साथ भ्रमित करने के लिए थोड़ा सा हूँ।क्यों संरक्षित संशोधक के साथ एक समारोह ओवरराइड किया जा सकता है और हर जगह सुलभ हो सकता है?
यह मानते हुए कि मैं निम्नलिखित वर्ग है:
public class A {
protected void foo() {
writefln("A.foo() called.");
}
};
public class B : A {
public override void foo() {
writefln("B.foo() called.");
}
};
protected
संशोधक मतलब यह है कि मैं सिर्फ विरासत में मिला वर्ग पर .foo()
विधि का उपयोग कर सकते, तो क्यों इस डी कार्यक्रम सामान्य रूप से संकलित?
यहाँ सी # नेट के बराबर है:
using System;
public class A {
protected virtual void foo() {
Console.WriteLine("a.foo() called.");
}
};
public class B : A {
public override void foo() {
Console.WriteLine("b.foo() called.");
}
};
public class MainClass {
public static void Main(string[] args) {
A a = new A();
B b = new B();
a.foo();
b.foo();
}
};
यह ऐसा नहीं compiles और दिए गए निम्न त्रुटि संदेश (के रूप में मैं उम्मीद):
test.cs (10 , 30): त्रुटि CS0507:
B.foo()': cannot change access modifiers when overriding
सुरक्षित 'विरासत में मिला सदस्य `A.foo()'
कोई इस डी व्यवहार की व्याख्या कर सकते हैं? अग्रिम में धन्यवाद।
आप उलझन में क्यों हैं? सी # और डी सिर्फ अलग-अलग भाषाएं हैं, इसलिए वे चीजों को अलग-अलग करते हैं। पहली बार, दोनों दृष्टिकोण मेरे लिए कुछ समझ में आते हैं, इसलिए यह तय करने के लिए भाषा डिजाइनरों पर निर्भर है कि किस तरह से जाना है। – svick
हम, क्योंकि मुझे यह ध्यान में था कि एक ऑब्जेक्ट उन्मुख प्रोग्रामिंग भाषा का एक्सेस-मॉडिफायर उसी तरह संचालित होता है। – Jack
डाउनवॉट्स - कृपया समझा सकते हैं? – Jack