【发布时间】:2011-03-30 22:56:39
【问题描述】:
我在 VS2010 上有这个简单的示例:
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 { }
}
我想知道为什么这不能正确构建。
【问题讨论】:
-
你得到的编译器错误是什么?
-
“非静态字段、方法或属性 'ConsoleApplication1.Program.MyMethod(ref ConsoleApplication1.AbsClass)' 需要对象引用” - 有点说明问题,不是吗?
-
@Femaref 的回答是正确的。注释掉的版本(带有 ConClass)不起作用的原因是作为参数传递给 ref 参数的变量类型必须与参数的类型完全匹配。这可以确保方法中的任何分配都可以正常工作。
标签: c# abstract-class ref