使用 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
。
如果您需要使用任何 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://docs.microsoft.com/es-es/archive/blogs/mshneer/vs-2010-compiler-error-interop-type-xxx-cannot-be-embedded-use-the-applicable-interface-instead
我最近突然想到:
我们有一个接口:
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
。
如果您需要使用任何 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://docs.microsoft.com/es-es/archive/blogs/mshneer/vs-2010-compiler-error-interop-type-xxx-cannot-be-embedded-use-the-applicable-interface-instead