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

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

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

我的问题:在我看来,我应该做什么,保持表格类中的所有内容。

什么时候我应该使用公共,私有和静态私人/公共?

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

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

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

何时使用私人的例子:

class Account { private int pin = 1090; public int Pin { get { return pin; } } } 

另一方面,公众则相反,访问公共成员没有任何限制,因此当用户访问时无关紧要的事情应该是公开的。

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

何时使用静态的示例:

  static int birth_year= 1985 

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

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

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

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

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

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

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

请参阅访问修饰符(C#编程指南) 。 但如果你有一本不错的C#和OOP / OOD书,它会好得多:这些都是计算机科学的基础知识。

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

以上都已经回答了,但我认为它可以简化一点……所以如果其他类将使用这种方法,那么装饰一个方法public。 如果不是 – 将其标记为私有。

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

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

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

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

Java提供了许多访问修饰符来设置类,变量,方法和构造函数的访问级别。 四个访问级别是:

对包可见,默认。 不需要修饰符。

仅对class级可见(私人)。

对世界可见(公众)。

包和所有子类(受保护)可见。

这是一个例子:

公共类自行车{

 private int cadence; private int gear; private int speed; private int id; private static int numberOfBicycles = 0; public Bicycle(int startCadence, int startSpeed, int startGear){ gear = startGear; cadence = startCadence; speed = startSpeed; id = ++numberOfBicycles; } // new method to return the ID instance variable public int getID() { return id; } ... 

}