方法参数可以是类或接口,很少混淆

时间:2009-08-05 00:35:48

标签: c# inheritance interface

如果我有课:

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());

我在某个地方看到了这个,我认为这只有在使用界面时才有可能吗?

4 个答案:

答案 0 :(得分:1)

它被称为多态,它可以用于类和接口。

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

答案 1 :(得分:1)

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

如果你有

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

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

HTH。 PK

答案 2 :(得分:0)

这样可以正常工作。 (假设它会编译......检查你的拼写)

答案 3 :(得分:0)

你可以做得很好。在这种情况下,您正在使用标准继承。想到这一点的最好方法是:“ablah”是一个“blah”,所以你可以在任何预期会出现问题的地方使用“ablah”实例。

一个常见的例子是

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

在这种情况下,“狗”是一种“动物”(你期望的),所以如果你有一种采取动物的方法,它将与狗一起使用。