访问其他类中的实现接口方法

时间:2012-07-12 12:56:24

标签: c# .net-4.0 interface

我是C#新手,我正在尝试实现一个界面。我知道我不能将访问modiefiers放到接口方法上,那么如何在下面的'TestClass2'的公共静态'Create'方法中访问'TestValue'?我得到的错误是......

'TestClass1'不包含'TestValue'的定义,并且没有可以找到接受类型'TestClass1'的第一个参数的扩展方法'TestValue'

public interface IParent
{
    string TestValue { get; }
}

public class TestClass1 : IParent
{
    string IParent.TestValue
    {
        get { return "hello"; }
    }
}

public class TestClass2
{
    private string _testValue;

    public static TestClass2 Create(TestClass1 input)
    {
        TestClass2 output = new TestClass2();
        output._testValue = input.TestValue;
        return output;
    }
}

3 个答案:

答案 0 :(得分:6)

在具体实施中添加public访问修饰符

public class TestClass1 : IParent
{
    private TestClass1 _testValue; 

    public string TestValue
    {
        get { return "hello"; }
    }
}

编辑:当你实际编写一个明确的界面实现时,我建议你看看以下SO问题:C# Interfaces. Implicit implementation versus Explicit implementation

答案 1 :(得分:0)

接口声明中不需要访问修饰符,因为接口的要点是为实现接口的任何类定义可公开访问的合约。基本上,虽然您没有在定义中指定访问修饰符,但所有方法/属性都被视为公共。

这意味着当您实现接口时,您以合同方式绑定以提供与接口的方法/属性签名匹配的 public 方法/属性。

简而言之,将 public 访问修饰符添加到您的具体类实现中,您将会很好。

答案 2 :(得分:0)

我尝试将对象转换为界面以获得类似的解决方案

public class TestClass2
{
    private string _testValue;

    public static TestClass2 Create(TestClass1 input)
    {
        TestClass2 output = new TestClass2();
        output._testValue =  ((ITestInterface)input).TestValue;
        return output;
    }
}

这也有效,但我更喜欢更简单的解决方案。