我只是想知道如何在另一个类中使用我自己的类实现接口成员。这是一个例子来说明我的问题:
// --- Both files are in the same namespace --- //
// --- OwnClassA is in another namespace --- //
// --- First file --- //
// OwnClassA is importet
public interface ITest {
OwnClassA varTest {get;}
}
// --- Second file --- //
// OwnClassA is importet
public class Test : ITest {
public readonly OwnClassA varTest;
}
Visual Studio Code说:'Test'没有实现接口成员'ITest.varTest'[Assembly-CSharp]
我在这里做错了什么?
答案 0 :(得分:4)
接口成员必须作为属性或方法公开,并且实现必须匹配。原始接口成员是属性。您已创建了一个字段。相反,让它成为一个autoproperty,你应该很高兴。
// --- Second file --- //
public class Test : ITest {
public OwnClassA varTest { get; set; }
}
或(如果您希望它是“只读”并且在课堂之外)
// --- Second file --- //
public class Test : ITest {
public OwnClassA varTest { get; private set; }
}
如果您希望使用readonly
关键字(从而强制varTest
只能在构造函数中初始化),则必须使用完全实现的属性:
// --- Second file --- //
public class Test : ITest {
private readonly OwnClassA _varTest;
public Test()
{
_varTest = new OwnClassA();
}
public varTest
{
get
{
return _varTest;
}
}
}
答案 1 :(得分:3)
接口使用属性; Test
中尝试的实现使用了一个字段。编译器对待它们的方式完全不同,并且完全不同。您的Test
课程需要将varTest
定义为属性。
答案 2 :(得分:3)
接口实现需要匹配接口:
public class Test : ITest {
public OwnClassA varTest { get; }
}
字段与属性不同;在接口中没有办法说实现必须有一个字段。