इससे पहले कि आप मुझ पर फायरिंग शुरू करें, मैं ऐसा नहीं कर रहा हूं, लेकिन another post में कोई व्यक्ति ने कहा कि यह संभव था। यह कैसे संभव है? मैंने प्रतिबिंब का उपयोग करके कुछ भी प्राप्त करने के बारे में कभी नहीं सुना है। लेकिन मैं कुछ अजीब बातें देखा है ...नेट में प्रतिबिंब का उपयोग करके आप एक सीलबंद कक्षा से कैसे उत्तराधिकारी हो सकते हैं?
उत्तर
वर्चुअल फ़ंक्शंस को ओवरराइड करने के बिना, एक सीलबंद वर्ग को उपclassing में बहुत अधिक बिंदु नहीं है।
आप, आप निम्न संकलक त्रुटि मिलती है उस में एक आभासी समारोह के साथ एक सील बंद वर्ग लिखने का प्रयास करें:
// error CS0549: 'Seal.GetName()' is a new virtual member in sealed class 'Seal'
हालांकि, अगर आप उन्हें एक आधार वर्ग में घोषणा करके सील वर्गों में आभासी कार्यों प्राप्त कर सकते हैं (इस तरह),
public abstract class Animal
{
private readonly string m_name;
public virtual string GetName() { return m_name; }
public Animal(string name)
{ m_name = name; }
}
public sealed class Seal : Animal
{
public Seal(string name) : base(name) {}
}
समस्या अभी भी बनी हुई है, हालांकि, मैं कैसे तुम संकलक पिछले चुपके सकता है आप एक उपवर्ग घोषित जाने के लिए नहीं देख सकता। मैंने IronRuby का उपयोग करने की कोशिश की (रूबी सभी हैकी भाषाओं में सबसे हैकस्टी है) लेकिन यहां तक कि यह मुझे नहीं जाने देगी।
'सीलबंद' हिस्सा एमएसआईएल में एम्बेडेड है, इसलिए मुझे लगता है कि सीएलआर स्वयं वास्तव में इसे लागू करता है। आपको कोड लोड करना होगा, इसे अलग करना होगा, 'सीलबंद' बिट को हटा देना होगा, फिर इसे फिर से इकट्ठा करना होगा, और नया संस्करण लोड करना होगा।
मैंने एक उदाहरण देखा है जहां किसी ने स्वयं को क्लियर किया है। डेनिस क्रूज़ और ओडब्ल्यूएएसपी पर एक खोज करें और आपको इसे – alexmac
क्रिक ढूंढना चाहिए। यह कट्टर –
सुरक्षा त्रुटियों जहां हमलावर सुरक्षा प्रणाली से अधिक मजबूत है त्रुटियां नहीं हैं। "मैंने अपने सेल फोन से ब्लूटूथ कमांड का जवाब देने के अलावा सभी ताले को समान रूप से बदलकर अपनी इमारत में तोड़ दिया।" ब्लूटूथ हमले आपके ताले को हटाने के बजाय अप्रासंगिक है! –
यह सकता (अगर मैं कर सकता आकार में वृद्धि होगी)। फ्रीनोड पर लड़कों के मुताबिक, इसमें प्रतिबिंब का उपयोग करके बाइट कोड को संशोधित करना शामिल होगा, और जेआईटी को बाइट कोड का एक नया सेट सौंपना होगा।
नहीं कि मैं पता हूं कैसे ... यह वही था जो उन्होंने सोचा था।
यही एकमात्र तरीका है जो इसे समझ में आता है। काम शामिल करने के लिए, कैसे कोई इसे औचित्य साबित कर सकता है ?? यह सिर्फ पागल है। – Kilhoffer
आप इसे वैध रूप से उचित नहीं ठहरा सकते हैं। – MagicKat
यदि आपने ऐसा किया है, तो आप वास्तव में एक मुहरबंद वर्ग से नहीं निकल रहे होंगे ... आप सीलिंग को हटाने के लिए कक्षा के साथ खराब हो जाएंगे, फिर सामान्य व्युत्पन्न करेंगे। यह आपकी समस्या का एक वैध समाधान हो सकता है, लेकिन मैं बस इतना कह रहा हूं, यह अब एक सीलबंद वर्ग से नहीं निकल रहा है :-) –
अन्य पोस्टर प्रतिबिंब की रेखाओं के साथ और अधिक सोच रहा होगा। अधिक सामान्य पढ़ने-योग्य प्रतिबिंब API के बजाय स्वीकार करें।
हालांकि, अभी भी संभव नहीं है (कम से कम this article के अनुसार)। लेकिन निश्चित रूप से प्रतिबिंब के साथ कुछ पेंच करना संभव है। स्वीकार करें कि जब तक आप वास्तव में उत्सर्जित कोड निष्पादित करने का प्रयास नहीं करते हैं तब तक फंस नहीं जाते हैं।
मुझे अन्य धागे में गलत धारणा पोस्ट करने के लिए खेद है, मैं सही ढंग से याद करने में विफल रहा। निम्नलिखित उदाहरण का उपयोग करके, Reflection.Emit का उपयोग करके, दिखाता है कि किसी अन्य वर्ग से कैसे प्राप्त किया जाए, लेकिन यह TypeLoadException को फेंकने पर रनटाइम पर विफल रहता है।
sealed class Sealed
{
public int x;
public int y;
}
class Program
{
static void Main(string[] args)
{
AppDomain ad = Thread.GetDomain();
AssemblyName an = new AssemblyName();
an.Name = "MyAssembly";
AssemblyBuilder ab = ad.DefineDynamicAssembly(an, AssemblyBuilderAccess.Run);
ModuleBuilder mb = ab.DefineDynamicModule("MyModule");
TypeBuilder tb = mb.DefineType("MyType", TypeAttributes.Class, typeof(Sealed));
// Following throws TypeLoadException: Could not load type 'MyType' from
// assembly 'MyAssembly' because the parent type is sealed.
Type t = tb.CreateType();
}
}
यदि आप जो चीज उत्पन्न कर चुके हैं उसे लोड नहीं कर सकते हैं, तो मुझे नहीं लगता कि व्युत्पन्न वर्ग बनाने के रूप में गणना की जाती है ... आखिरकार, आप 'प्रतिबिंब। प्रवेश' का उपयोग करके सभी प्रकार की गड़बड़ कर सकते हैं, लेकिन वह ऐसा नहीं करता है कि वे चीजें किसी भी तरह वैध हैं। –
@ ओरियनएडवर्ड्स: यही वह है जो मैंने इस जवाब में लिखा था। यह काम नहीं करेगा, और मैं अपनी पिछली धारणाओं में गलत था। – dalle
यह
public class GenericKeyValueBase<TKey,TValue>
{
public TKey Key;
public TValue Value;
public GenericKeyValueBase(TKey ItemKey, TValue ItemValue)
{
Key = ItemKey;
Value = ItemValue;
}
}
में GenericKeyValueBase बुलाया
पुट इस एक नया वर्ग बनाएं और उस से विरासत के साथ साथ आप के लिए जोड़ें अतिरिक्त विस्तार विधियां जोड़ सकते हैं/निकालें (Addat और RemoveAt) करने के लिए अपने यदि आप वास्तव में अच्छा महसूस कर रहे हैं तो नई व्युत्पन्न कक्षा (और इसे एक संग्रह/शब्दकोश बनाएं)।
एक साधारण implentation उदाहरण है जहाँ आप एक आधार के लिए एक सामान्य System.Collections.Generic.KeyValuePair का प्रयोग करेंगे, लेकिन इसके बजाय ऊपर कोड
class GenericCookieItem<TCookieKey, TCookieValue> : GenericKeyValueBase<TCookieKey,TCookieValue>
{
public GenericCookieItem(TCookieKey KeyValue, TCookieValue ItemValue) : base(KeyValue, ItemValue)
{
}
}
- 1. क्या दो एएसपीएक्स पेज कक्षा के पीछे एक ही कोड का उत्तराधिकारी हो सकते हैं?
- 2. एक सीलबंद कक्षा
- 3. आप एक मुहरबंद कक्षा का नकल कैसे करते हैं?
- 4. सी # में प्रतिबिंब का उपयोग करके आप एक कॉन्स पर रखी गई विशेषता को क्यों पढ़ सकते हैं?
- 5. प्रतिबिंब। हम इसका उपयोग करके क्या हासिल कर सकते हैं?
- 6. आप एक पूरी कक्षा सीलबंद/अंतिम क्यों बनायेंगे?
- 7. यदि आप उस वर्ग से उत्तराधिकारी नहीं हो सकते हैं जिसे आप सजाने के लिए चाहते हैं तो आप सजावट पैटर्न को कैसे कार्यान्वित कर सकते हैं?
- 8. क्या आप एक कक्षा में दो कक्षाएं बढ़ा सकते हैं?
- 9. आप एक सामान्य फैक्ट्री विधि का उत्तराधिकारी कैसे प्राप्त कर सकते हैं?
- 10. क्या आप वीबी में पैरामीटर के साथ एक उप (कन्स्ट्रक्टर) का उत्तराधिकारी बना सकते हैं?
- 11. फ़ायरबेस का उपयोग करके आप प्रभावी ढंग से त्रुटियों को कैसे संभाल सकते हैं या कैसे कर सकते हैं?
- 12. क्या आप कक्षा में प्रारंभिक सूची में एक लैम्ब्डा का उपयोग कर सकते हैं?
- 13. सेमफोर का उपयोग करके आप एक कंडीशन वैरिएबल कैसे कार्यान्वित कर सकते हैं?
- 14. आप विम में पायथन का उपयोग कैसे कर सकते हैं?
- 15. मैं प्रतिबिंब का उपयोग कर सकते कैसे एक ठोस उदाहरण
- 16. जावास्क्रिप्ट में सी ++ कक्षा का उत्तराधिकारी कैसे प्राप्त करें?
- 17. नेट प्रतिबिंब
- 18. क्या आप एक नेट फॉर्म को नियंत्रण के रूप में लोड कर सकते हैं?
- 19. सीएसएस का उपयोग करके या यदि आवश्यक एसवीजी का उपयोग करके आप इस चमकदार रूप को कैसे बना सकते हैं?
- 20. सी # में आप कैसे नींबू (nybble) बाइट्स कर सकते हैं?
- 21. आप कक्षा के गुणों पर कैसे लूप कर सकते हैं?
- 22. क्या कक्षा में वर्चुअल डेटा सदस्य हो सकते हैं?
- 23. कक्षा के बिना सी # में अकेले खड़े हो सकते हैं?
- 24. सीएसएस का उपयोग करके आप "नॉकआउट" प्रभाव कैसे प्राप्त कर सकते हैं?
- 25. Reflection.Emit का उपयोग करके एक शाब्दिक अभिव्यक्ति इंजेक्ट कैसे कर सकते हैं?
- 26. रेल में, आप एक दृश्य का उपयोग करके JSON कैसे प्रस्तुत करते हैं?
- 27. प्रतिबिंब का उपयोग करके गतिशील रूप से एक प्रकार को तुरंत कैसे चालू करें?
- 28. कक्षा उत्तराधिकारी पर ऑब्जेक्ट संरचना का नुकसान
- 29. Google क्लोजर कंपाइलर का उपयोग करके आप संकलित संस्करण से स्रोत कोड का एक अनुभाग बहिष्कृत कर सकते हैं?
- 30. आप आईएमएपी का उपयोग कर मेल कैसे भेज सकते हैं?
mmhh उपयोग कर सकते हैं मैं यहाँ लगता है कि जब प्रतिष्ठा उपयोगी आता है। जिसने उस प्रश्न का उत्तर दिया वह 1 9 प्रतिनिधि है (सीपी 30 के रूप में) संभावना है कि वह नहीं जानता कि वह किस बारे में बात कर रहा है।दूसरी ओर हम आप कहते हैं, यह संभव नहीं है। इसलिए, आपको इस मामले में अपने आप पर भरोसा करना चाहिए। – OscarRyz
:) Kilhoffer (2,459) बनाम dalle.myopenid.com (1 9) – OscarRyz
लॉल, हास्यास्पद, ऑस्कर! – user18931