में ऑब्जेक्ट्स, पैरामीटर और रेफरी कीवर्ड जब किसी विधि का औपचारिक तर्क प्रकार 'ऑब्जेक्ट' होता है, तो वास्तविक तर्क के लिए, किसी ऑब्जेक्ट प्रकार के लिए विरासत के माध्यम से यह संभव है। एक बार विधि में वस्तु को अपेक्षित प्रकार के लिए डाला जा सकता है। सब ठीक है।सी #
"सबसे अच्छा अतिभारित विधि:
अगर, हालांकि, विधि के हस्ताक्षर 'वस्तु' का औपचारिक तर्क है, रेफरी कीवर्ड यानी methodName (संदर्भ वस्तु) का उपयोग कर, संकलक कि बताते हुए एक त्रुटि फेंकता 'ByRefTest.Program.changeMeByRef (संदर्भ वस्तु)' के लिए मैच में कुछ अमान्य तर्क "तर्क '1': 'रेफरी ByRefTest.Person' से 'रेफरी वस्तु' के लिए परिवर्तित नहीं कर सकते" है ।
या का उपयोग नहीं के बीच का अंतर वस्तुओं को पार करते समय रेफ केवर्ड का उपयोग करते हुए पैरामीटर को ए फ्राइडमैन के ब्लॉग http://crazorsharp.blogspot.com/2009/07/passing-objects-using-ref-keywordwait.html में बहुत अच्छी तरह से समझाया गया है, लेकिन कस्टम प्रकार को वास्तविक तर्क के रूप में पारित करना क्यों संभव नहीं है प्रकार 'ऑब्जेक्ट' का औपचारिक तर्क रेफरी कीवर्ड का उपयोग करता है?
एक उदाहरण के रूप:
class Program
{
static void Main(string[] args)
{
Person p = new Person();
changeMe(p); // compiles
changeMeByRef(ref p); // throws error
object pObject = (object)p;
changeMeByRef(ref pObject); // compiles
}
public static void changeMeByRef(ref object obj)
{
Person p = (Person)obj;
}
public static void changeMe(object obj)
{
Person p = (Person)obj;
}
}
public class Person
{
}
धन्यवाद।
ps मैं बस करने के लिए हस्ताक्षर बदल दिया है:
public static void changeMeByRef < टी > (संदर्भ टी obj) जहां टी: व्यक्ति
इस changeMeByRef (रेफरी पी) के लिए संकलित;
यह http://stackoverflow.com/questions/1207144/c-why-doesnt-ref-and-out-support-polymorphism/1207302#1207302 –