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

问题描述 投票:0回答:3

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

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

我在这里做错了什么?

c# interface
3个回答
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;
        }
    }
}

3
投票

接口使用属性;在Test中尝试的实现使用了一个字段。编译器对待它们的方式完全不同,并且完全不同。你的Test类需要将varTest定义为属性。


3
投票

接口实现需要匹配接口:

public class Test : ITest {
  public OwnClassA varTest { get; }
}

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

© www.soinside.com 2019 - 2024. All rights reserved.