我什么时候应该使用公共/私有/静态方法?

时间:2009-04-27 13:32:06

标签: c# vb.net

我是C#的新手。到目前为止,我曾经创建过每个全局变量 - public static。我的所有方法都是public static,所以我可以从其他类中访问它们。

我在SO上看到我拥有的公共静态方法越少越好。所以我通过将所有代码放在一个类中来重写我的应用程序 - 表单类。现在我的所有方法都是私有的,并且没有静态方法。 / p>

我的问题:我应该怎么做,在表格类中保留所有内容都是我认为的转储。

我应该何时使用public,私有和静态私有/公共?

我将公共方法视为“缺点”,因为它们可以被反编译,但我对此表示怀疑。我的公共方法也可以被反编译。私有方法中的“私有”是什么?

编辑:我不是在问如何阻止我的程序被反编译,我问是否应该使用静态,私有和公共。还有:是否存在问题表单类中的代码,所以我不必使用公共方法?

7 个答案:

答案 0 :(得分:13)

除非另有证明,否则一切都应该是私密的。 公共和私有之间的区别在于应该保持兼容的东西和不应该保持兼容的东西,应该对世界感兴趣的东西和不应该是它的业务的东西。

当你声明一些公开的东西时,类(以及因此对象)正在发表一个强烈的声明:这是我的可见界面,还有很多其他类似的东西,但这是我的。 公共接口是一个合同协议,您的类正在向世界其他地方(无论这意味着)输出它可以做什么。如果你修改了公共接口,你就有可能违反世界其他地方对该类的假设。

另一方面,私人内容是课堂内部的内容。它支持类在承载对象状态(如果它是方法)或保持其内部状态(如果它是变量)时必须用来完成其工作的功能。您可以随意破解和修改类私有内容,而不会破坏接口契约,这意味着这为您提供了很大的重构自由(内部数据表示,例如,效率)。私有东西不是界面的一部分。

受保护是涉及重新实现的开放性的东西。如果可以的话,尽量避免深层嵌套的遗产。你冒着使事情变得非常困难的风险,因为你的重新实现类可以搞定基类。

从技术上讲,类应声明接口(公共)和实现(私有)。接口根本不应该有代码,只需委托私有“实现”逻辑。这就是为什么在Java和C#中你有接口语句,它在C ++中形式化了纯抽象类概念。

静态是逻辑上存在于类的领域中的东西,但不依赖于类本身的状态。当设计模式指示它时应该谨慎使用它(例如,单件,工厂方法)。

答案 1 :(得分:8)

private适用于您只想在正文类中访问的类成员,而C#成员默认设置为private,除非指定不同

何时使用私人的例子:

class Account
{

  private int pin = 1090;
  public int Pin
  {
     get { return pin; }
  }
}
另一方面,公众则相反,访问公共成员没有任何限制,因此当与用户有权无关的事情应该公开时。

另一方面,静态与二者无关,因为它不处理方法的权限,另一方面静态是常量或类型声明。如果将static一词应用于类,则必须将类中的每个成员声明为static。

何时使用静态的示例:

  static int birth_year= 1985

Modifiers in C# Reference将为您提供C#中所有修饰符的更多详细信息以及如何使用它们的示例

答案 2 :(得分:4)

Access Modifiers (C# Programming Guide)。但是,如果你有一本不错的C#和OOP / OOD书,它会好得多:这些都是计算机科学的基础知识。

长话短说:访问修饰符促进封装,这基本上意味着每个类都应该保持自己的私有性。

答案 3 :(得分:4)

上面已经回答了所有内容,但我认为它可以简化一下......所以如果其他类将使用此方法,请将方法设置为public。如果不是 - 将其标记为私有。

例如,您有 A类 B类。说 A类有3种方法(x,y,z)。方法 x,y 将由 B类使用,因此将它们标记为公共,但方法 z 将仅由方法 x 在 A类内,因此请将其标记为私有,因为无需将此方法公开给外部世界。此方法中的逻辑仅供内部使用。

静态不同这种装饰意味着您无法创建标记为静态的对象的实例。对象是 - 如关键字所示 - 静态(无法更改或修改)。

答案 4 :(得分:3)

我将开始学习面向对象编程的基础知识。那里有很多资源。可能最好的方法是开始一门课程。你似乎远非理解OO原则。

答案 5 :(得分:0)

这似乎比上面提到的问题更基本。要在OO语言中适当地发展,您需要弄清楚如何将最终目标分解为一系列协同工作的对象(甚至包含并相互扩展)以实现一系列目标。一旦您开始正确实施OO设计,这种抽象有很多好处。如果您还没有完成解释 O bject O 面向编程的基础知识,那么您将需要一本新的C#书。

答案 6 :(得分:0)

在除了上述,考虑工作情形。您不是一个人工作。同事可能会从您的类中调用您实际上不想公开的方法,或者认为将来需要进行重大更改。这可能是如果你想一个私人