[英]Alternative to static nested classes in C# for grouping a classes public methods?
[英]Confused about public, static and private methods/classes/variables in C#
我是使用C#编程的初学者,来自Python背景。
我对关键字public和static感到困惑。 有人可以帮我澄清一下吗?
(顺便说一句,我已经知道私有变量/方法永远不能在函数外部访问,而公共变量/方法则可以)
我只是随机尝试了解静态和非静态方法之间的区别。
using System;
public class MainClass
{
public static void Main ()
{
int[] anArray = getAnArray();
foreach (int x in anArray)
{
Console.WriteLine (x);
}
MainClass m = new MainClass ();
foreach (int x in anArray)
{
m.Print(x);
}
}
public static int[] getAnArray()
{
int[] myArray = { 1, 2, 3, 4 };
return myArray;
}
public void Print(int x)
{
Console.WriteLine(x);
}
}
我知道要使用非静态方法Print,首先需要创建MainClass的实例,然后通过执行m.Print()来访问该方法。
但是我不知道什么时候确切使用它。 据我所知,如果Print是静态的,它将容易得多,因为我不需要创建自己的函数的新实例。
例如,这将更简单
private static void Print(int x)
{
Console.WriteLine (x);
}
并使用Print(x)调用Print函数,而不是先创建Main实例。
那么基本上什么时候使用什么呢? 什么时候不仅对方法而且对变量甚至类都使用静态或非静态? (例如,何时应该使用公共静态类MainClass)
使用的公共/非静态和静态方法的小型自说明示例:
Car car1 = new Car();
car1.setBrand("Ford"); //public non-static method
Car car2 = new Car();
car2.setBrand("Opel"); //public non-static method
Car.CompareParameters(car1, car2); //static method
基本上,非静态方法和属性描述此类的对象。
您不能使用类名调用Car.setBrand()
-非静态方法。
作为一般经验法则:
静态方法 static
关键字使方法可以直接访问,而无需创建对象的实例。 这样,它所具有的任何状态或副作用都是static
,即“全局”。 因此,只能使用static
创建纯函数,即仅从其输入中得出返回值的方法,而不能从方法外部读取或写入状态。
static
的使用是简化代码和测试之间的权衡。 放入static
方法的副作用越多,代码测试就越困难。
公共方法在整个应用程序中都可以访问所有标记为public
内容。 在internal
标记某些内容将其限制为仅该程序集(您可以将术语“程序集”视为与您的解决方案中的项目等效),而将其private
则将其限制为只能在类/结构中评估。
如果遵循封装原则,那么遵循的规则将始终使用private
,如果需要则仅使用internal
。 并且仅在确实需要时才使用public
。
static
成员是类成员,并且在该类的所有实例之间共享。
public
方法/属性可用于其他类。 可能有一个public static
成员可供其他类使用。
您不能从静态成员访问非静态成员。
如果某个函数不需要访问任何实例变量,则可以将其设置为static
以稍微提高性能,但是还有更多使用静态成员的有用方法。
我头顶上有一些用于静电的用途:
如果有意义的事情可供类的所有实例共享,请使其静态
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.