2010-11-08 3 views
145

Что это означает, когда вы добавляете ключевое слово static в метод?Что такое «статический метод» на C#?

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

Вы можете добавить ключевое слово static в класс? Что это значит?

+6

Вы можете использовать статический метод, не создавая экземпляр этого класса просто по классу_name.static_method_name(); –

ответ

260

A static Функция, в отличие от обычной (экземпляра), не связана с экземпляром класса.

класс 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

+1

@Moshe: Да, это так. –

+2

@Moshe: Точно. С помощью статического метода вам не нужен экземпляр класса для вызова метода, просто класс. –

4

Статическая функция означает, что она связана с классом (не конкретного экземпляра класс, но сам класс), и его можно вызвать, даже если экземпляры классов не существуют.

Статический класс означает, что класс содержит только статические элементы.

-3

Статическое ключевое слово, применяемое к классу, сообщает компилятору создать один экземпляр этого класса. Нельзя тогда «новый» один или несколько экземпляров класса. Все методы в статическом классе сами должны быть объявлены статическими.

Возможно, и часто желательно иметь статические методы нестатического класса. Например, фабричный метод при создании экземпляра другого класса часто объявляется статическим, так как это означает, что конкретный экземпляр класса, содержащего факторный метод, не требуется.

Для хорошего объяснения того, как, когда и где смотреть MSDN

+8

Нет, статический класс * не создан *. Учитывая, что все в нем статично, зачем вы хотите его создать? –

+1

Класс 'static' не имеет экземпляра вообще. – SLaks

+4

Извините, ребята, я не понимаю ... Я сказал, что создается один экземпляр, и вы не можете его создать. Разумеется, создается один, статический экземпляр, иначе код не будет вызываться? –

-1

статическая переменная не связывает с объектом класса. Доступ к нему возможен с помощью имени класса. Весь объект класса будет разделять статическую переменную.

Задав функцию как статическую, она ограничит доступ к этой функции внутри этого файла.

10

Статический метод, поле, свойство или событие могут быть вызваны в классе, даже если экземпляр класса не был создан. Если создаются какие-либо экземпляры класса, они не могут использоваться для доступа к статическому члену. Существует только одна копия статических полей и событий, а статические методы и свойства могут иметь доступ только к статическим полям и статическим событиям. Статические элементы часто используются для представления данных или вычислений, которые не изменяются в ответ на состояние объекта; например, математическая библиотека может содержать статические методы вычисления синуса и косинуса. Статические члены класса объявляются с помощью статического ключевого слова перед типом возвращаемого membe

3

Вскоре вы не можете создать экземпляр статического класса: Ex:

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

Вы не можете сделать так:

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

Вы можете сделать только:

myStaticClass.someFunction(); 
16

С другой точки зрения: Считайте, что вы хотите внести некоторые изменения в одну строку. , например, вы хотите сделать буквы Uppercase и так далее. вы делаете другой класс под названием «Инструменты» для этих действий. нет смысла делать экземпляр класса «Инструменты», потому что в этом классе нет какого-либо сущности (по сравнению с классом «Человек» или «Учитель»). Итак, мы используем статическое ключевое слово, чтобы использовать класс «Инструменты», не делая никаких экземпляров, и когда вы нажимаете точку после имени класса («Инструменты»), вы можете получить доступ к тем методам, которые вы хотите.

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

При добавлении «статический» ключевое слово в метод, это означает, что базовая реализация дает тот же результат для любого экземпляра класса. Излишне говорить, что результат зависит от изменения значения параметров

Смежные вопросы