每种类型的标识符的正确术语是什么?

Mik*_*sen 7 c# oop terminology

请使用以下代码:

IFoo foo = new FooImplementation();
Run Code Online (Sandbox Code Playgroud)

标识符foo有两种类型:

  1. IFoo - 这是编译器将强制执行的类型.我只能调用属于IFoo合同的方法,否则我会遇到编译器错误.
  2. FooImplementation - 这是运行时已知的类型.我可以在运行时向下转换foo为a FooImplementation,然后调用非IFoo方法FooImplementation.

我的问题:这两种类型的正确术语是什么.我可以在学校发誓,我们被教导的IFoo是标识符的静态类型,并且FooImplementation是它的动态类型,但是经过大量搜索,我似乎无法找到任何参考.

Mik*_*ray 7

我会打电话IFooFooImplementation编译时和运行时类型,分别.C#规范使用这种语言,例如,在谈论虚拟方法时(第1.6.6.4节):

调用虚方法时,发生该调用的实例的运行时类型决定了要调用的实际方法实现.在非虚方法调用中,实例的编译时类型是决定因素.


Eri*_*ert 5

我同意Mike Z.C#中的常用术语是"编译时类型"和"运行时类型".

"静态类型"和"动态类型"是完全合理的术语,但我会在C#的上下文中避免使用它们."静态类型"很容易与"静态类"混淆,"静态类"只能包含静态方法.并且"动态类型"很容易与添加到C#4的动态类型功能混淆.