【问题标题】:Method parameter can be a class or interface, little confused方法参数可以是类也可以是接口,有点混乱
【发布时间】:2009-08-05 00:35:47
【问题描述】:

如果我有课:

public blah
{

}

然后我有另一个继承 blah 的类"

public ablah : blah
{

}

那我可以这样做吗?

public class Someservice
{
 public bool SomeBlah(blah b)
 {

 }   
}

我可以将其称为带有 blah 或 ablah 类的服务吗?

即。

Someservice s1 = new Somesercie();

s1.SomeBlah(new blah());

s1.SomeBlah(new ablah());

我在某处看到了这个,我认为这只有在使用接口的情况下才有可能?

【问题讨论】:

  • 这个问题可以通过你的几个键来回答。有人同意它应该关闭吗?

标签: c# inheritance interface


【解决方案1】:

这称为多态性,类和接口都可以。

如果你想在基类中提供一些实现,通常你会使用一个类(这在接口声明中是不可能的)。接口也只允许公共成员..

【讨论】:

    【解决方案2】:

    是的,虽然它不使用接口,而是使用面向对象编程的一个方面,称为多态 (http://msdn.microsoft.com/en-us/library/ms173152(VS.80).aspx)

    如果你有

    public class Someservice{ 
        public bool SomeBlah(ablah b) 
        { }  
    }
    

    您的 SomeService 代码将不起作用,因为虽然您可以将 ablah 对象转换为 blah 对象,但不能反过来。这就像说我有一辆车(废话),它是一辆丰田汽车(废话)。如果我正在做需要汽车的事情,我的丰田汽车会符合要求。但是,如果我要做一些需要丰田的事情,我就不能使用任何旧车。

    HTH。 PK

    【讨论】:

      【解决方案3】:

      这样就可以了。 (假设它会编译...检查你的拼写)

      【讨论】:

        【解决方案4】:

        你可以做到这一点。在这种情况下,您使用的是标准继承。最好的理解方式是:“ablah”是一个“blah”,因此您可以在任何期望一个 blah 的地方使用“ablah”实例。

        一个常见的例子是一个

        public class Animal {} 
        public class Dog  : Animal {}
        

        在这种情况下,“Dog”是“Animal”(这是您所期望的),因此如果您有一个采用动物的方法,它将适用于 Dog。

        【讨论】:

          猜你喜欢
          • 2015-08-21
          • 2021-08-21
          • 1970-01-01
          • 1970-01-01
          • 2020-05-02
          • 2012-12-07
          • 1970-01-01
          • 2021-04-17
          • 2020-06-04
          相关资源
          最近更新 更多