我是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;
}
}
答案 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;
}
}
这也有效,但我更喜欢更简单的解决方案。