如何在接口定义的接口中使用参数

时间:2014-09-07 12:51:56

标签: c#

我尝试定义这样的界面:

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"); }
}

2 个答案:

答案 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");
            }
        }