如何在c#中的另一个类中使用我自己的类实现接口成员?

时间:2018-01-02 17:26:02

标签: c# interface

我只是想知道如何在另一个类中使用我自己的类实现接口成员。这是一个例子来说明我的问题:

// --- 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]

我在这里做错了什么?

3 个答案:

答案 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; }
}

字段与属性不同;在接口中没有办法说实现必须有一个字段。