정적 키워드를 메소드에 추가 할 때의 의미는 무엇입니까?
public static void doSomething(){
//Well, do something!
}
static
수업에 키워드를 추가 할 수 있습니까 ? 그러면 무슨 의미입니까?
정적 키워드를 메소드에 추가 할 때의 의미는 무엇입니까?
public static void doSomething(){
//Well, do something!
}
static
수업에 키워드를 추가 할 수 있습니까 ? 그러면 무슨 의미입니까?
답변:
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
다른 관점에서 : 단일 문자열을 일부 변경하려고합니다. 예를 들어 글자를 대문자 등으로 만들려고합니다. 이러한 작업을 위해 "도구"라는 다른 클래스를 만듭니다. 해당 클래스 내에 사용 가능한 엔티티 유형이 없기 때문에 "도구"클래스의 인스턴스를 작성한다는 의미는 없습니다 ( "개인"또는 "교사"클래스와 비교). 따라서 인스턴스를 만들지 않고 "도구"클래스를 사용하기 위해 정적 키워드를 사용하며 클래스 이름 다음에 점 ( "도구")을 누르면 원하는 메소드에 액세스 할 수 있습니다.
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();
}
}
}
클래스의 인스턴스가 생성되지 않은 경우에도 클래스에서 정적 메서드, 필드, 속성 또는 이벤트를 호출 할 수 있습니다. 클래스의 인스턴스가 작성되면 정적 멤버에 액세스하는 데 사용할 수 없습니다. 정적 필드 및 이벤트의 사본은 하나만 존재하며 정적 메소드 및 특성은 정적 필드 및 정적 이벤트에만 액세스 할 수 있습니다. 정적 멤버는 종종 객체 상태에 따라 변하지 않는 데이터 또는 계산을 나타내는 데 사용됩니다. 예를 들어, 수학 라이브러리에는 사인 및 코사인을 계산하기위한 정적 메서드가 포함될 수 있습니다. 정적 클래스 멤버는 membe의 리턴 유형 전에 static 키워드를 사용하여 선언됩니다.
곧 정적 클래스를 인스턴스화 할 수 없습니다 : 예 :
static class myStaticClass
{
public static void someFunction()
{ /* */ }
}
다음과 같이 만들 수 없습니다 :
myStaticClass msc = new myStaticClass(); // it will cause an error
당신은 만들 수 있습니다 :
myStaticClass.someFunction();
정적 키워드는 클래스에 적용될 때 컴파일러에게 해당 클래스의 단일 인스턴스를 작성하도록 지시합니다. 그런 다음 클래스의 하나 이상의 인스턴스를 '새로'만들 수 없습니다. 정적 클래스의 모든 메소드 자체는 정적으로 선언되어야합니다.
정적이 아닌 클래스의 정적 메소드를 갖는 것이 가능하며 종종 바람직합니다. 예를 들어 다른 클래스의 인스턴스를 만들 때 팩토리 메소드는 종종 static으로 선언됩니다. 이는 factor 메소드를 포함하는 클래스의 특정 인스턴스가 필요하지 않음을 의미합니다.
언제 어디서 언제 MSDN을 볼 수 있는지에 대한 자세한 설명
static
클래스는 전혀 인스턴스가 없습니다.