2010-11-08 211 views
145

将静态关键字添加到方法时,这意味着什么?什么是C#中的“静态方法”?

public static void doSomething(){ 
    //Well, do something! 
} 

您可以将static关键字添加到类中吗?那意味着什么?

+6

您可以使用静态方法,而无需简单地通过class_name.static_method_name()创建该类的实例。 – 2010-11-08 13:27:25

回答

260

A static功能,不像常规(实例)功能,与类的实例不相关。

A static类是只能包含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 
+20

所以它就像一个类方法而不是实例方法? – Moshe 2010-11-08 13:12:14

+1

@Moshe:是的,没错。 – 2010-11-08 13:14:12

+2

@Moshe:没错。使用静态方法,您不需要类的实例来调用方法,而只需要类。 – 2010-11-08 13:14:21

4

静态函数意味着它与类(不特定实例相关联类但类本身),即使没有类实例存在,也可以调用它。

静态类意味着类只包含静态成员。

-3

static关键字在应用于类时告诉编译器创建该类的单个实例。然后不可能“新”一个或多个类的实例。静态类中的所有方法都必须声明为静态。

有可能,而且经常希望拥有非静态类的静态方法。例如,创建另一个类的实例时的工厂方法通常被声明为静态,因为这意味着不需要包含因子方法的类的特定实例。

有关如何,何时何地看到MSDN

+8

不,静态类从未实例化。鉴于其中的所有内容都是静态的,你为什么要*实例化它? – 2010-11-08 13:17:41

+1

“静态”类根本没有实例。 – SLaks 2010-11-08 13:17:59

+4

对不起,我不明白......我说过创建了一个实例,你不能新建一个实例。肯定会创建一个单一的静态实例,否则代码将无法调用? – 2010-11-08 13:57:31

-1

的静态变量不与类的对象链接一个很好的解释。它可以使用classname来访问。该类的所有对象将共享静态变量。

通过使函数成为静态函数,它将限制该函数在该文件中的访问。

10

即使没有创建类的实例,也可以在类上调用静态方法,字段,属性或事件。如果创建了该类的任何实例,则不能使用它们来访问静态成员。静态字段和事件只存在一个副本,静态方法和属性只能访问静态字段和静态事件。静态成员通常用于表示不响应对象状态而改变的数据或计算;例如,数学库可能包含用于计算正弦和余弦的静态方法。 静态类成员使用static关键字的membe的返回类型之前宣布

3

不久你不能实例化静态类: 例:

static class myStaticClass 
{ 
    public static void someFunction() 
    { /* */ } 
} 

你不能让这样的:

myStaticClass msc = new myStaticClass(); // it will cause an error 

你只能:

myStaticClass.someFunction(); 
16

从另一个角度来看: 请考虑您想对单个字符串进行一些更改。例如,你想使字母为大写字母,例如 等等。 您为这些操作创建另一个名为“工具”的类。 由于在该类中没有任何种类的实体(与“Person”或“Teacher”类相比),因此没有制作“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(); 

    } 
} 
} 
0

向方法中添加“static”关键字时,这意味着底层实现为该类的任何实例提供了相同的结果。不用说,结果随参数值的变化而变化

相关问题