我有VS2010這個簡單的例子:抽象類作爲ref參數 - 編譯器錯誤
using System;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
AbsClass absClass = new ConClass();
// I have tried this also and the error is different:
// ConClass absClass = new ConClass();
absClass.Id = "first";
Console.WriteLine(absClass.Id);
MyMethod(ref absClass); // <<- ERROR.
Console.WriteLine(absClass.Id);
Console.ReadKey();
}
public void MyMethod(ref AbsClass a)
{
a.Id = "new";
}
}
public abstract class AbsClass
{
public string Id { get; set; }
}
public class ConClass : AbsClass { }
}
我想知道爲什麼不能建立正確的。
你得到的編譯器錯誤是什麼? – 2011-03-30 22:58:12
「非靜態字段,方法或屬性需要對象引用'ConsoleApplication1.Program.MyMethod(ref ConsoleApplication1.AbsClass)'」 - 有點兒說這一切,不是嗎? – 2011-03-30 23:02:36
@ Femaref的回答是正確的。註釋版本(使用ConClass)不起作用的原因是,作爲參數傳遞給ref參數的變量類型必須完全匹配參數的類型。這可以確保方法中的任何分配都能正常工作。 – 2011-03-30 23:08:08