繁体   English   中英

使用 Interface 或 Class 定义变量

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM