C# 프로그래밍 튜토리얼에서 액세스 한정자를 읽은 후에는 동일한 네임 스페이스의 다른 Form
에서 public
메서드를 정의하는 것으로 충분하다는 결론을 얻었습니다.public vs public static Methods
그러나 실제 구현할 때마다 동일한 네임 스페이스의 Forms
에서 참조하기 위해이 메서드를 static
으로 정의해야했습니다.
나는 뭔가를 잃어 버리고 있습니까? 내가 잘못하고 있니?
C# 프로그래밍 튜토리얼에서 액세스 한정자를 읽은 후에는 동일한 네임 스페이스의 다른 Form
에서 public
메서드를 정의하는 것으로 충분하다는 결론을 얻었습니다.public vs public static Methods
그러나 실제 구현할 때마다 동일한 네임 스페이스의 Forms
에서 참조하기 위해이 메서드를 static
으로 정의해야했습니다.
나는 뭔가를 잃어 버리고 있습니까? 내가 잘못하고 있니?
public static
메서드의 경우 개체에 대한 참조가 필요하지 않습니다. 이 메서드는 정적이며 class
수준에서 액세스 할 수 있습니다.
공용 메서드에 액세스 할 수없는 경우 개체에 대한 참조가 필요합니다. 다음과 같이
public class AClass
{
public void DoSomething() {}
public static void DoSomethingElse() {}
}
당신은 사용할 수 있습니다 :
AClass.DoSomethingElse(); // no object reference required
AClass.DoSomething(); // will give compiler error, since you have no object reference.
var anObject = new AClass();
anObject.DoSomething(); // will work fine.
anObject.DoSomethingElse(); // compile error (thx hvd).
"anObject.DoSomethingElse(); // 잘 작동합니다"- 정말입니까? Mono의 컴파일러는 "CS0176 오류 : 정적 멤버는 인스턴스 참조로 액세스 할 수 없으며 대신 형식 이름으로 한정"오류가 발생합니다. Microsoft의 컴파일러에서도이 오류를 볼 수 있습니다. – hvd
실제로이 오류 코드 CS0176은 [해당 오류에 대한 Microsoft의 코드입니다] (http://msdn.microsoft.com/en-us/library/zhcxt2bd%28v=vs.90%29.aspx). – hvd
@hvd oopsie thx. – bas
public static
방법은 객체 인스턴스를 필요로하지 않는, 그들은 클래스의 인스턴스를 생성하지 않고 사용할 수 있습니다
ClassName.MyStaticPublicMethodName()
곳 public
(비 정적) 메소드는 클래스의 인스턴스가 필요하기 때문에 public (비 정적) 메소드는 일반적으로 객체의 데이터 멤버 (필드)
ClassName obj = new ClassName();
obj.MyPublicMethod();
의 인스턴스를 만들 필요가 아닌 정적 공공 방법을 사용하려면? 클래스가 정적으로 표시 되었습니까? 일부 코드 게시 – DGibbs
[공개/비공개/정적 메서드를 사용해야 할 때가있을 수 있습니까?] 가능한 복제본 (http://stackoverflow.com/questions/793494/when-should-i-use-public-private-static-methods) –