public class Foo : IFoo
...
和有什么区别
IFoo foo = new Foo();
和
Foo foo = new Foo();
最佳答案
区别仅在于变量的声明类型。每当您使用表达式 foo
时,编译器都会使用该类型。 .例如,假设 Foo
类包含一些不在 IFoo
中的方法.使用第一个声明,该成员将不可见-您必须强制转换 foo
输入 Foo
调用它。在第二个声明中,您可以直接访问它。IFoo
的成员则相反。使用 explicit interface implementation 实现在 Foo
.这种情况比较少见,但确实会发生。
通过第一个声明,您还可以将变量重新分配给对实现 IFoo
类型的任何其他对象的引用。 ,例如
foo = new SomeOtherIFooImplementation();
而对于第二个声明,您只能分配与
Foo
兼容的值- 即 Foo
的实例或派生类。 (当然,在这两种情况下,您都可以将变量设置为 null。)通常,编写接口(interface)而不是特定实现是有利的。这意味着编译器将阻止您使用特定于实现的细节,这反过来意味着将来更改为不同的实现可能会更容易。
变量的类型也会影响诸如重载决议之类的事情:
DoSomething(foo);
可能会根据
foo
是否调用不同的方法声明为 Foo
或 IFoo
.基本上,变量的编译时类型在各种方面都很重要——几乎每次使用变量时,代码含义的某些方面都取决于变量的类型。
关于c# - IFoo foo = new Foo() 和 Foo foo = new Foo() 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1658140/