为什么类不能声明静态方法和具有相同签名的实例方法

时间:2011-11-08 20:44:03

标签: c# .net clr

  

可能重复:
  Static and Instance methods with the same name?

我们今天在团队讨论后提出了这个问题。

我并不是100%熟悉CLR如何从程序集中实际加载类的代码,但我认为静态方法存储在一个单独的数据结构中,而不是所有类的实例方法。

为什么类不能同时声明具有相同签名的静态和实例方法?

整个讨论都是理论性的,不是说这是不是一个好的做法,但如果有任何明显的原因,我仍然希望更好地理解这一点。

1 个答案:

答案 0 :(得分:0)

在OOP中,可以直接从类中访问的静态对象或类的成员,而非静态成员只能从它所属的实例访问。

C#遵循类似的方法原则。静态方法可以直接从类访问,而非静态方法(或我喜欢调用它们的实例方法)必须从实例访问。这就是为什么需要对例如方法进行实例化的原因,而对于静态方法,它只是不需要,而且不切实际(见下文)。

在OOP中,静态变量用于实例变量无法存储的值。示例:假设您想要计算一个类的实例数量?你会如何将它存储在一个实例中?

这些方法使用了类似的原理。它们应该用于在类的实例中不切实际的过程。我倾向于将它们用于广泛的程序(不是技术术语),这意味着那些不需要我实例化对象的程序。例如,添加两个参数。 (这种用法可能也可能不正确,但我相信是这样)

但是,如果要添加对象的两个属性,则该方法不能是静态的,因为您很快就会意识到,静态方法无法访问类中的实例方法或变量。当然这是有道理的,因为静态方法不知道从哪个类获取这些实例,除非它被告知,因为它不是实例本身的一部分)