[英]Defining a variable with Interface or with Class
这最近突然出现在我的脑海里:
我们有一个接口:
interface IPerson { }
和实现所述接口的 Class:
class Person : IPerson{ }
现在,初始化 Person-Variable 的首选方法是什么:
Person person = new Person();
或者:
IPerson person = new Person();
使用类型推断和智能感知
var person = new Person();
显示该人属于 Person 类型,而不是 IPerson。 我也在想这样的事情:
List<IPerson> persons;
与这个:
List<Person persons;
在这种情况下,在未来的重构等方面,声明变量或定义集合的首选方式是什么。如果这是一个重复的问题,请告诉。
最好的祝福
通常,您更喜欢使用接口。 假设您有一个Person
列表,并且您还有一种人,例如SuperHero
:
class SuperHero : IPerson{ }
在这种情况下, SuperHero
可能继承自Person
,但作为示例,我们可能会假设它没有意义。 所以你有 2 个类实现IPerson
。
如果您有Person
类型的变量,则无法管理SuperHero
。 如果你有一个List<Person>
你只能存储Person
,而不是SuperHero
s。
如果您需要使用任何IPerson
,则必须使用接口:
List<IPerson> list = new List<IPerson>();
list.Add(new Person());
list.Add(new SuperHero());
还有一点关于“var”。 如果您使用 var,编译器会将 var 更改为您在右侧使用的类型。 你可以强制铸造:
var person = (IPerson)new Person();
当您使用 OLE 自动化和 COM 对象时,在 .NET 中您需要接口的实现。 该实现具有 Class 后缀。 但是您可以使用没有 Class 后缀的接口。 更多信息在这里: https://learn.microsoft.com/es-es/archive/blogs/mshneer/vs-2010-compiler-error-interop-type-xxx-cannot-be-embedded-use-the-applicable-界面代替
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.