मुझे पता है कि इसके कई जवाब हैं, और यह अब काफी पुराना है, लेकिन ऐसा करने का सबसे आसान तरीका सिर्फ उन्हें नया निजी
के रूप में घोषित करना है।
एक उदाहरण पर विचार करें जो मैं वर्तमान में काम कर रहा हूं, जहां मेरे पास एक एपीआई है जो किसी तृतीय पक्ष डीएलएल में हर विधि उपलब्ध कराती है। मुझे अपनी विधियां लेनी है, लेकिन मैं "getThisValue" और "setThisValue" विधि के बजाय, .Net प्रॉपर्टी का उपयोग करना चाहता हूं। इसलिए, मैं एक दूसरी कक्षा का निर्माण करता हूं, पहले प्राप्त करता हूं, एक ऐसी संपत्ति बनाता हूं जो प्राप्त करने और सेट विधियों का उपयोग करता है, और उसके बाद मूल प्राप्त करें और विधि को निजी रूप से सेट करें। वे अभी भी उन लोगों के लिए उपलब्ध हैं जो किसी पर कुछ अलग करना चाहते हैं, लेकिन अगर वे सिर्फ इंजन का उपयोग करना चाहते हैं, तो वे विधियों के बजाय गुणों का उपयोग करने में सक्षम होंगे।
डबल क्लास विधि का उपयोग सदस्यों को छिपाने के लिए new
घोषणा का उपयोग करने में असमर्थ होने पर किसी भी प्रतिबंध से छुटकारा पाता है। यदि सदस्यों को आभासी के रूप में चिह्नित किया जाता है तो आप बस ओवरराइड
का उपयोग नहीं कर सकते हैं।
public class APIClass
{
private static const string DllName = "external.dll";
[DllImport(DllName)]
public extern unsafe uint external_setSomething(int x, uint y);
[DllImport(DllName)]
public extern unsafe uint external_getSomething(int x, uint* y);
public enum valueEnum
{
On = 0x01000000;
Off = 0x00000000;
OnWithOptions = 0x01010000;
OffWithOptions = 0x00010000;
}
}
public class APIUsageClass : APIClass
{
public int Identifier;
private APIClass m_internalInstance = new APIClass();
public valueEnum Something
{
get
{
unsafe
{
valueEnum y;
fixed (valueEnum* yPtr = &y)
{
m_internalInstance.external_getSomething(Identifier, yPtr);
}
return y;
}
}
set
{
m_internalInstance.external_setSomething(Identifier, value);
}
}
new private uint external_setSomething(int x, float y) { return 0; }
new private unsafe uint external_getSomething(int x, float* y) { return 0; }
}
अब valueEnum दोनों वर्गों के लिए उपलब्ध है, लेकिन केवल APIUsageClass क्लास में संपत्ति दिखाई दे रही है। एपीआईसीएलएएस क्लास अभी भी उन लोगों के लिए उपलब्ध है जो मूल एपीआई का विस्तार करना चाहते हैं या इसे अलग तरीके से उपयोग करना चाहते हैं, और APIUsageClass उन लोगों के लिए उपलब्ध है जो कुछ और सरल चाहते हैं।
आखिरकार, मैं जो करूँगा वह एपीआईसीएलएएस आंतरिक बना रहा है, और केवल मेरी विरासत कक्षा का पर्दाफाश कर रहा है।