我尝试定义这样的界面:
public interface Something
{
void f();
}
public interface SomethingElse
{
void g(Something s);
}
这应该说g接受一个遵循“Something”接口的参数。当我尝试创建类时,编译器将拒绝SomethingElse类,因为它与接口定义的签名不匹配。但是我该如何定义界面?
class Something_class : Something
{
public void f() { Console.WriteLine("Something.f"); }
}
class SomethingElse_class : SomethingElse
{
public void g(Something_class s) { Console.WriteLine("SomethingElse.g"); }
}
答案 0 :(得分:1)
您的SomethingElse
界面说任何实现都需要接受实现Something
的任何类型 - 而不仅仅是一个具体示例。
您需要将SomethingElse_class
更改为:
class SomethingElse_class : SomethingElse
{
public void g(Something s) { Console.WriteLine("SomethingElse.g"); }
}
...或使SomethingElse
通用,例如
public interface SomethingElse<T> where T : Something
{
void g(T s);
}
然后SomethingElse_class
将是:
class SomethingElse_class : SomethingElse<Something_class>
{
public void g(Something_class s) { ... }
}
答案 1 :(得分:0)
class SomethingElse_class : SomethingElse
{
public void g(Something_class s)
{
Console.WriteLine("SomethingElse.g");
}
public void g(Something s) //overload g with the (Something s)
{
Console.WriteLine("Something.g");
}
}