Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 具有接口的多重继承_C#_Design Patterns_Interface_Multiple Inheritance - Fatal编程技术网

C# 具有接口的多重继承

C# 具有接口的多重继承,c#,design-patterns,interface,multiple-inheritance,C#,Design Patterns,Interface,Multiple Inheritance,我在看一段视频,这里有一张照片 我的问题是:如果不使用将A和B对象保存在内部并调用它们的接口,就不能创建AB类吗?当我说界面可以忽略时,我扔掉了什么信息 是的,AB类可以包含A和B对象作为类成员 图像中的示例在“真实”示例中有点难以描绘 我通常遵循规则: 如果是[类型],则继承。 如果有[type],则为成员 示例。 猫是一种动物,所以猫是从动物那里继承的。 猫有一条尾巴,所以尾巴是猫的一员 由于C#不允许从多个类继承,因此必须使用接口 猫是一种动物,但它也是一个骗子,这是两种不同的类型。 因

我在看一段视频,这里有一张照片


我的问题是:如果不使用将A和B对象保存在内部并调用它们的接口,就不能创建AB类吗?当我说界面可以忽略时,我扔掉了什么信息

是的,
AB
类可以包含
A
B
对象作为
类成员

图像中的示例在“真实”示例中有点难以描绘

我通常遵循规则:
如果是[类型],则继承。
如果有[type],则为成员

示例。
猫是一种动物,所以猫是从动物那里继承的。
猫有一条尾巴,所以尾巴是猫的一员

由于C#不允许从多个类继承,因此必须使用接口

猫是一种动物,但它也是一个骗子,这是两种不同的类型。

因此,它实现了
IAnimal
ITrickster
接口

通过实施
IA
IB
AB
可用于任何预期
IA
IB
的地方:

void doSomethingWithIA(IA item)
{
  item.AMethod();
}

...

AB ab = new AB();
doSomethingWithIA(ab);

如果
AB
的方法名与
IA
IB
doSomethingWithIA()
的方法名相同,则不会接受它作为参数。

我想你的问题是,为什么我们甚至需要一个接口

我能想到的原因之一是减少了类之间的耦合。 在测试驱动的开发中,接口可以帮助您用模拟对象替换

查看这些链接以了解更多信息。

当人们第一次了解界面时,这是一个常见的问题。一个接口就是一个契约,如果你只有一个使用契约的对象,那么很难看到它的价值,但是当你有数百个时,它就容易多了。@paqogomez你知道有什么好的资源可以说明这一点吗?还是像上面所看到的那样缩小了很多?任何一本好的c#书都会带你浏览接口并讨论它们的优点。我的经验是使用它们,直到你理解为什么它们能让你更好地编写代码。@paqogomez谢谢:)我会看看教科书,看看它是否有助于我看到其中的价值。谢谢你,也许我不完全了解这个世界,我有很多关系。关系中最重要的是什么?“猫是动物”->任何动物的方法或属性都适用于猫。“猫有尾巴”->尾巴的方法和属性适用于猫的一部分,但不是所有的猫。第二个链接帮助很大。多谢各位