2013-03-17 5 views
3

C# 프로그래밍 튜토리얼에서 액세스 한정자를 읽은 후에는 동일한 네임 스페이스의 다른 Form에서 public 메서드를 정의하는 것으로 충분하다는 결론을 얻었습니다.public vs public static Methods

그러나 실제 구현할 때마다 동일한 네임 스페이스의 Forms에서 참조하기 위해이 메서드를 static으로 정의해야했습니다.

나는 뭔가를 잃어 버리고 있습니까? 내가 잘못하고 있니?

+0

의 인스턴스를 만들 필요가 아닌 정적 공공 방법을 사용하려면? 클래스가 정적으로 표시 되었습니까? 일부 코드 게시 – DGibbs

+0

[공개/비공개/정적 메서드를 사용해야 할 때가있을 수 있습니까?] 가능한 복제본 (http://stackoverflow.com/questions/793494/when-should-i-use-public-private-static-methods) –

답변

5

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). 
+0

"anObject.DoSomethingElse(); // 잘 작동합니다"- 정말입니까? Mono의 컴파일러는 "CS0176 오류 : 정적 멤버는 인스턴스 참조로 액세스 할 수 없으며 대신 형식 이름으로 한정"오류가 발생합니다. Microsoft의 컴파일러에서도이 오류를 볼 수 있습니다. – hvd

+0

실제로이 오류 코드 CS0176은 [해당 오류에 대한 Microsoft의 코드입니다] (http://msdn.microsoft.com/en-us/library/zhcxt2bd%28v=vs.90%29.aspx). – hvd

+0

@hvd oopsie thx. – bas

1

public static 방법은 객체 인스턴스를 필요로하지 않는, 그들은 클래스의 인스턴스를 생성하지 않고 사용할 수 있습니다

ClassName.MyStaticPublicMethodName()

public (비 정적) 메소드는 클래스의 인스턴스가 필요하기 때문에 public (비 정적) 메소드는 일반적으로 객체의 데이터 멤버 (필드)

당신이 방법에있는 클래스의 인스턴스를 생성나요 클래스

ClassName obj = new ClassName(); 
obj.MyPublicMethod(); 
관련 문제