이것은 컴파일러 오류를 제공합니다 :대리자를 정적으로 선언하면 컴파일러 오류가 발생하는 이유는 무엇입니까? "수정 자 'static'이 (가)이 항목에 유효하지 않습니다.
public static delegate void SomeCoolDelegate();
왜?
이것은 컴파일러 오류를 제공합니다 :대리자를 정적으로 선언하면 컴파일러 오류가 발생하는 이유는 무엇입니까? "수정 자 'static'이 (가)이 항목에 유효하지 않습니다.
public static delegate void SomeCoolDelegate();
왜?
그래서 무슨 일이 것은이라고 생각합니다. 이 클래스의 역할은 함수 포인터 (또는 필요한 경우 여러 함수 포인터)로 작동하는 것입니다.
위임자와 함께 작업하는 데 필요한 모든 사항을 지시 할 때 컴파일러에서 새 클래스를 만들어야합니다. 이 클래스를 만들지 만 인스턴스 수준의 메서드와 속성 등 모든 인스턴스의 메서드와 속성이 있습니다.
따라서 정적으로 대리인을 선언하는 것은 무의미합니다 (JaredPar 및 다른 사람들이 지적한 것처럼). 당신은 '모든 배짱이 정적이 아니며 따라서 도달 할 수없는 등의 고정 된 클래스를 제공하라'는 말을합니다.
delegate
을 선언하면 유형이 선언됩니다. C#의 대표는 static
을 만들 수 없습니다. 델리게이트 형식의 변수를 선언하려면 다음과 같이합니다.
public delegate void SomeCoolDelegate(); // declare a type called SomeCoolDelegate
public static SomeCoolDelegate foo; // declare foo as an object of type SomeCoolDelegate
위임자에게는 의미가 없습니다. 의미 적으로 말하자면,이 메서드 시그니처의 구현을 절대로 원하지 않는다는 것입니다!
당신은
protected static SomeCoolDelegate SomeMethod { get; set; }
정적으로 클래스를 표시
, 당신은 당신이 그것을 인스턴스화 싶지 않은 말을하는지 ... 정적으로 구현을 선언 할 수 있습니다. 대리자는 단순히 메서드 서명을 식별하는 방법입니다.대리인을 선언하면 형식이 선언됩니다. static으로 선언 될 인스턴스 메소드 만 포함하는 유형의 경우는 거의 없습니다.
델리게이트는 런타임 퍼스펙티브 유형에서 구성원을 포함하는 폴더와 같은 데이터 저장소의 분류 일 뿐이며 유형은 정적이기 때문에 유형을 정적으로 만들지 않습니다. 모든 유형의 구성원은 정적 일 수 있습니다.
C# 개발자가 클래스에 정적 멤버 만 작성하도록 클래스에 정적으로 작성 하겠지만 그 유형이 정적이거나 정적이 아니라는 의미는 아닙니다. 대리인이 정말 당신을 위해 새로운 특수 클래스를 생성하는 컴파일러를 요구하고있다 선언
: 좋아
이 델리게이트 만 사용할 수 있도록하려고합니까? – Justin
@Justin : yes로 가정합시다 :-) – richard