gpt4 book ai didi

c# - IFoo foo = new Foo() 和 Foo foo = new Foo() 有什么区别

转载 作者:太空宇宙 更新时间:2023-11-03 17:36:46 31 4
gpt4 key购买 nike

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 是否调用不同的方法声明为 FooIFoo .

基本上,变量的编译时类型在各种方面都很重要——几乎每次使用变量时,代码含义的某些方面都取决于变量的类型。

关于c# - IFoo foo = new Foo() 和 Foo foo = new Foo() 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1658140/

31 4 0