我有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