【问题标题】:var and dynamic Keyword in C# , related to Polymorphism? [closed]C# 中的 var 和 dynamic 关键字,与多态性有关? [关闭]
【发布时间】:2020-02-26 12:13:35
【问题描述】:

我们可以说 var 关键字是编译时多态性,而动态是运行时多态性吗?

var a=10; (Compile time Polymorphism)
dynamic a=10; (Dynamic is Run Time Polymorphism)
a="XYZ"; (Dynamic is Run Time Polymorphism)

【问题讨论】:

  • “是”或“否”的答案会给你什么?
  • var 只是显式写出类型的简写。它与多态无关。
  • 这两个关键字都与多态性无关。当然,您可以在多态的上下文中使用这两个关键字,但您不必这样做。
  • 我知道多态的概念,但是我这里的问题是不同的,假设有人问你,Var 和 Dynamic 是像多态 CLR 在编译时决定的多态(编译时多态)和运行时(覆盖)这里存在相同的概念,在编译和运行时决定。

标签: c# oop dynamic polymorphism var


【解决方案1】:

我认为您不能将vardynamic 与多态性完全联系起来。多态性是关于动作和行为,而不是数据类型或绑定。

var 在编译时评估,dynamic 在运行时评估。不过,你是对的。

为了更好地理解,请查看What's the difference between dynamic (C# 4) and var?

另外,一个建议。稍加阅读和搜索即可回答您的问题。

更多说明 多态性是关于可以采取多种形式或行为不同的实体。作为对象可以是父类实例或子类实例。现在var 不能单独使用多种类型。它的类型只是通过分配给它的对象的类型来推断的。所以技术上var 不是编译时多态性。相反,它取决于分配给它的对象。 因此,vardynamic 可能会帮助您实现或展示多态性,但它们本身并不是多态性的示例。

【讨论】:

  • dynamic绝对是实现多态性的一种方式。 var,没那么多。
  • @KonradRudolph 是的,我同意这一点。我的意思是,比较 var 和 dynamic 似乎并不是人们应该如何看待和理解运行时和编译时多态性的经典示例。
  • 我知道多态的概念,但是我这里的问题是不同的,假设有人问你,Var 和 Dynamic 是像多态 CLR 在编译时决定的多态(编译时多态)和运行时(覆盖)这里存在相同的概念,在编译和运行时决定。
  • @Sukhraj 查看我的编辑
【解决方案2】:

vardynamic 与多态性没有任何关系。多态性意味着当需要派生较少的类型时,您可以提供派生较多的类型的实例。 vardynamic 只是语法糖;编译器会根据情况确定您的意思或需要的类型(在dynamic 的情况下)。苹果和橙子。

【讨论】:

  • “语法糖”≠“非多态性”。两者是正交的。正如我在另一条评论中提到的,dynamic绝对是实现多态性的一种方式。
猜你喜欢
  • 2010-09-22
  • 1970-01-01
  • 2011-04-03
  • 1970-01-01
  • 1970-01-01
  • 2010-09-28
  • 2015-05-14
  • 1970-01-01
  • 2010-11-11
相关资源
最近更新 更多