请使用以下代码:
IFoo foo = new FooImplementation();
标识符foo
有两种类型:
IFoo
- 这是编译器将强制执行的类型。我只能调用属于IFoo
契约的方法,否则我会收到编译错误。FooImplementation
- 这是运行时已知的类型。我可以在运行时将foo
转发给FooImplementation
,然后调用FooImplementation
的非IFoo方法。 我的问题:这两种类型的正确术语是什么。我可以发誓在学校我们被告知IFoo
是标识符的静态类型而FooImplementation
是动态类型 ,但经过大量搜索,我似乎无法找到任何参考。
答案 0 :(得分:7)
我将分别调用IFoo
和FooImplementation
编译时和运行时类型。这种语言由C#规范使用,例如,在谈论虚拟方法时(第1.6.6.4节):
调用虚方法时,进行该调用的实例的运行时类型决定了要调用的实际方法实现。在非虚方法调用中,实例的编译时类型是决定因素。
答案 1 :(得分:5)
我同意Mike Z.C#中的常用术语是“编译时类型”和“运行时类型”。
“静态类型”和“动态类型”是完全合理的术语,但我会在C#的上下文中避免使用它们。 “静态类型”很容易与“静态类”混淆,“静态类”只能包含静态方法。并且“动态类型”很容易与添加到C#4的动态类型功能混淆。
答案 2 :(得分:4)
第一个是声明的类型。第二个是混凝土类型。
......至少那就是我所说的。