- वहाँ एक रास्ता इतना है कि यह का कोई उदाहरण एक क्षेत्र में संग्रहित किया जा सकता (
TypedReference
औरArgIterator
करने के लिए एक समान तरीके से) एक प्रकार (या और भी बेहतर, एक अंतरफलक) चिह्नित करने के लिए है? - इसी तरह, अज्ञात तरीकों से गुजरने के उदाहरणों को रोकने के लिए कोई तरीका है - और सामान्य रूप से - उपर्युक्त दो प्रकार के व्यवहार की नकल करने के लिए?
- क्या यह आईएलडीएएम के माध्यम से या अधिक आम तौर पर आईएल संपादन के माध्यम से किया जा सकता है? चूंकि UnconstrainedMelody एक संकलित असेंबली के द्विआधारी संपादन के माध्यम से सामान्य रूप से अनुपयोगी परिणाम प्राप्त करता है, हो सकता है कि एक ही दृष्टिकोण के माध्यम से कुछ प्रकार (या यहां तक कि बेहतर, सार तत्व या मार्कर इंटरफेस) को "चिह्नित" करने का एक तरीका हो।
मुझे शक है यह संकलक में hardcoded क्योंकि documentation for the error CS0610 कहता है:मेक प्रकार के उदाहरणों गैर संग्रहणीय
कुछ प्रकार है कि खेतों या गुण के रूप में इस्तेमाल नहीं किया जा सकता है। इन प्रकारों में शामिल हैं ...
मेरी राय में संकेत मिलता है कि उन प्रकारों के सेट को बढ़ाया जा सकता है - लेकिन मैं गलत हो सकता था।
मैंने एसओ पर थोड़ी सी खोज की है और जब मैं समझता हूं कि throwing a compiler error प्रोग्रामेटिक रूप से नहीं किया जा सकता है, तो मुझे कोई स्रोत नहीं मिला कि कुछ "विशेष" प्रकार के व्यवहार दोहराए जा सकते हैं।
भले ही प्रश्न अधिकतर अकादमिक है, फिर भी उत्तर के लिए कुछ उपयोग हो सकते हैं। उदाहरण के लिए, कभी-कभी यह सुनिश्चित करने के लिए उपयोगी हो सकता है कि एक निश्चित वस्तु का जीवनकाल उस विधि ब्लॉक को बाध्य कर देता है जो इसे बनाता है।
संपादित करें:RuntimeArgumentHandle
एक और (अनियमित) गैर-स्तरीय प्रकार है।
संपादित करें 2: यह किसी भी काम का हो सकता है, तो ऐसा लगता है कि CLR अभी भी यह सोचते हैं कि प्रकार के कोई रास्ता नहीं दूसरों से अलग कर रहे हैं और साथ ही एक अलग तरीके से उन प्रकार के व्यवहार करता है, अगर न केवल संकलक ()। उदाहरण के लिए, निम्न प्रोग्राम TypeLoadException
TypedReference*
के बारे में फेंक देगा। मैंने इसे कम करने के लिए इसे अनुकूलित किया है लेकिन आप जो कुछ भी चाहते हैं उसके आसपास काम कर सकते हैं। पॉइंटर के प्रकार को बदलने के लिए, कहें, void*
अपवाद फेंक नहीं देगा।
using System;
unsafe static class Program
{
static TypedReference* _tr;
static void Main(string[] args)
{
_tr = (TypedReference*) IntPtr.Zero;
}
}
अगर मैं * हार्ड-कोडेड, बीटीडब्ल्यू था तो मुझे आश्चर्य नहीं होगा। सिर्फ इसलिए कि प्रलेखन इसे पिन करना नहीं चाहता है इसका मतलब यह नहीं है कि यह संकलक में किया गया तरीका नहीं है। –
मुझे एक ही चीज़ लगता है, लेकिन मुझे जांच करनी होगी। –
[CS0611] (http://msdn.microsoft.com/en-US/library/bfca7x6z (v = vs.80) .aspx) एक संबंधित त्रुटि है, हालांकि शायद दोनों का समाधान दोनों पर लागू होगा। – Mir