我是一个使用C#编程的初学者,来自Python背景。
我对公共关键字和静态关键字感到困惑。谁能帮我澄清一下不同之处吗?
(顺便说一句,我已经知道私有变量/方法永远不能在函数之外访问,而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);
}
}我理解要使用非静态方法打印,首先需要创建MainClass的实例,然后通过执行m.Print()访问该方法。
但是,我不知道什么时候才能确切地使用哪一种。据我所见,如果打印是静态的,它会容易得多,因为我不需要为自己的函数创建一个新实例。
对于例如,这会更简单。
private static void Print(int x)
{
Console.WriteLine (x);
}并使用Print(x)调用Print函数,而不是先创建Main实例。
所以基本上什么时候用什么?什么时候使用静态或非静态的不仅是方法,而且是变量,甚至是类?(例如何时使用公共静态类MainClass)
发布于 2016-03-15 10:11:46
static成员是类成员,并在该类的所有实例之间共享。
public方法/属性可用于其他类。有可能有一个public static成员,它可供其他类使用。
不能从静态成员访问非静态成员。
如果一个函数不需要访问任何实例变量,那么它就可以通过static来稍微提高性能,但是有更多有用的方法来使用静态成员。
我的头上有一些静电的用途:
如果一个类的所有实例共享的东西是有意义的,那么就让它是静态的。
发布于 2016-03-15 10:41:27
正在使用的公共/非静态和静态方法的小型自解释示例:
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() -非静态方法。
发布于 2016-03-15 11:01:01
作为一般的经验法则:
静态方法 static关键字使方法可以直接访问,而不必创建对象的实例。因此,任何状态或副作用都将是static,即“全局”。因此,只使用static创建纯函数,即仅从输入获得返回值的方法,而不是从方法外部读取或写入状态的方法。
static的使用是简化代码和测试之间的权衡。添加到static方法中的副作用越多,代码测试就越困难。
公共方法任何标记为public的东西都可以在整个应用程序中访问。标记某物internal将其限制为仅限于该程序集(可以将“程序集”一词视为与解决方案中的项目等效的术语),而private则将其限制为只能在类/结构中进行评估。
如果您遵循封装原则,那么要遵循的规则是始终使用private,如果需要的话只使用internal。只有当你真的需要的时候才使用public。
https://stackoverflow.com/questions/36008165
复制相似问题