当你在一个方法前面加上static关键字时,这意味着该方法属于类而不是属于实例,在使用该方法时无需创建类的实例对象。
public static void doSomething(){
//Well, do something!
}
你可以向类中添加 static
关键字吗?如果加上它,会有什么意义?
当你在一个方法前面加上static关键字时,这意味着该方法属于类而不是属于实例,在使用该方法时无需创建类的实例对象。
public static void doSomething(){
//Well, do something!
}
你可以向类中添加 static
关键字吗?如果加上它,会有什么意义?
静态
函数与普通(实例)函数不同,它不与类的实例相关联。
静态
类是一种只能包含静态
成员的类,因此无法实例化。
例如:
class SomeClass {
public int InstanceMethod() { return 1; }
public static int StaticMethod() { return 42; }
}
InstanceMethod
,你需要该类的一个实例:SomeClass instance = new SomeClass();
instance.InstanceMethod(); //Fine
instance.StaticMethod(); //Won't compile
SomeClass.InstanceMethod(); //Won't compile
SomeClass.StaticMethod(); //Fine
从另一个角度来看: 考虑您想对单个字符串进行一些更改。 例如,您想将字母大写等。 您可以创建另一个名为“Tools”的类来执行这些操作。 由于该类内没有任何实体可用(与“Person”或“Teacher”类相比),因此无需创建“Tools”类的实例。 因此,我们使用static关键字以便在不创建任何该类实例的情况下使用“Tools”类,并且当在类名“Tools”之后按下点时,您可以访问所需的方法。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Tools.ToUpperCase("Behnoud Sherafati"));
Console.ReadKey();
}
}
public static class Tools
{
public static string ToUpperCase(string str)
{
return str.ToUpper();
}
}
}
很快就会发现无法实例化静态类:
例如:
static class myStaticClass
{
public static void someFunction()
{ /* */ }
}
myStaticClass msc = new myStaticClass(); // it will cause an error
您只能进行以下操作:
myStaticClass.someFunction();
静态函数意味着它与类相关联(不是类的特定实例,而是类本身),即使没有类的实例存在也可以调用。
静态类意味着类仅包含静态成员。
static 关键字的核心是只有一个 RAM 中的副本(方法/变量/类),这将被共享给所有调用。
静态变量不与类的对象链接。它可以使用类名访问。类的所有对象将共享静态变量。
通过将函数设置为静态,它将限制该文件内该函数的访问权限。
当应用于类时,static关键字告诉编译器创建该类的单个实例。因此,无法“new”一个或多个该类的实例。静态类中的所有方法必须自身声明为静态。
通常希望非静态类具有静态方法是可行的,也是理想的。例如,当创建另一个类的实例的工厂方法通常被声明为静态,这意味着不需要包含工厂方法的类的特定实例。
有关如何、何时和何处的详细解释,请参见MSDN。
static
类根本没有实例。 - SLaks