2

我是 C# 新手,正在尝试实现一个接口。我知道我不能将访问修饰符放在接口方法上,那么如何在下面的“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;
    }
}
4

3 回答 3

6

在您的具体实现中添加public访问修饰符:

public class TestClass1 : IParent
{
    private TestClass1 _testValue; 

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

编辑:当您实际编写显式接口实现时,我建议您查看以下 SO 问题:C# Interfaces。隐式实现与显式实现

于 2012-07-12T12:59:08.183 回答
0

接口声明中不需要访问修饰符,因为接口的目的是为实现该接口的任何类定义可公开访问的协定。本质上,尽管您没有在定义中指定访问修饰符,但所有方法/属性都被视为公共的。

这意味着当您实现接口时,您必须提供与接口的方法/属性签名相匹配的公共方法/属性。

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

于 2012-07-12T13:03:34.697 回答
0

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

public class TestClass2
{
    private string _testValue;

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

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

于 2012-07-28T12:16:46.807 回答