Что такое "статический метод" в C#?



что это значит, когда вы добавляете ключевое слово static метода?



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


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

544   8  

8 ответов:

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

С другой точки зрения: Считайте, что вы хотите внести некоторые изменения в одну строку. например, вы хотите сделать буквы прописными и так далее. вы создаете другой класс с именем "инструменты" для этих действий. нет смысла создавать экземпляр класса "инструменты", потому что внутри этого класса нет никакой сущности (сравните с классом" человек "или" учитель"). Так мы используем ключевое слово static для использования класса "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 перед возвращаемым типом мембе

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

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

в ближайшее время вы не можете создать экземпляр статического класса: Например:

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

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

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

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

myStaticClass.someFunction();

когда вы добавляете ключевое слово "static" к методу, это означает, что базовая реализация дает тот же результат для любого экземпляра класса. Само собой разумеется, результат меняется с изменением значения параметров

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

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

ключевое слово static, применяемое к классу, указывает компилятору создать один экземпляр этого класса. Тогда невозможно "создать" один или несколько экземпляров класса. Все методы в статическом классе должны быть объявлены статическими.

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

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

Comments

    Ничего не найдено.