我是C#编程的初学者,来自Python背景。
我对关键字public和static感到困惑。有人可以为我澄清一下这个区别吗?
(顺便说一句,我已经知道私有变量/方法永远不能在函数外部访问,而Public可以访问)
这是我随机尝试理解静态和非静态方法之间区别的东西。
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)答案 0 :(得分:1)
使用中的公共/非静态和静态方法的小型自解释示例:
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()
- 非静态方法。
答案 1 :(得分:1)
作为一般经验法则:
静态方法
static
关键字使方法可以直接访问,而无需创建对象的实例。因此,它所具有的任何状态或副作用将是static
,即"全球"。因此,只能使用static
创建纯函数,即仅从输入中获取返回值的方法,既不从方法外部读取或写入状态。
使用static
是简化代码和测试之间的权衡。您放入static
方法的副作用越多,您的代码就越难以测试。
公开方法
标记为public
的任何内容都可在整个应用程序中访问。标记某些内容internal
会将其限制为该程序集(您可以查看术语"程序集"等同于解决方案中的项目")private
将其限制为仅在课程/结构中评估。
如果您遵循封装原则,则遵循的规则始终使用private
,如果需要,仅使用internal
。如果你真的需要,只能使用public
。
答案 2 :(得分:-1)
static
成员是类成员,并在该类的所有实例之间共享。
public
个方法/属性。可以有一个public static
成员,可供其他类使用。
您无法从静态成员访问非静态成员。
如果函数不需要访问任何实例变量,那么可以使static
获得轻微的性能提升,但是有更多有用的方法可以使用静态成员。
一些用于静电的用途:
如果某个类的所有实例共享某些内容是有意义的,请将其设为静态