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

时间:2013-01-28 23:47:31

标签: c# oop terminology

请使用以下代码:

IFoo foo = new FooImplementation();

标识符foo有两种类型:

  1. IFoo - 这是编译器将强制执行的类型。我只能调用属于IFoo契约的方法,否则我会收到编译错误。
  2. FooImplementation - 这是运行时已知的类型。我可以在运行时将foo转发给FooImplementation,然后调用FooImplementation的非IFoo方法。
  3. 我的问题:这两种类型的正确术语是什么。我可以发誓在学校我们被告知IFoo是标识符的静态类型FooImplementation动态类型 ,但经过大量搜索,我似乎无法找到任何参考。

3 个答案:

答案 0 :(得分:7)

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

  

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

答案 1 :(得分:5)

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

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

答案 2 :(得分:4)

第一个是声明的类型。第二个是混凝土类型。

......至少那就是我所说的。