DoActions
정적 메서드가 인스턴스가 아닌 있기 때문에 이런 일이에 대한
감사 메서드를 사용하지만 MainForm
은 인스턴스 필드/속성입니다. 그 차이점은 인스턴스 메소드가 정의 된 클래스의 인스턴스에서 작동한다는 것입니다. 정적 메소드는 정의하지 않습니다.
이
는 의미 인스턴스 방법은 예를 들어,
this
키워드를 통해 속성, 필드와 그 포함하는 클래스의 메서드에 액세스 할 수 있습니다 wheras :
// Instance field
Form1 MainForm;
void InstanceMethod()
{
Form1 frm = this.MainForm;
}
당신은 정적 메서드 내부에서 같은 일을 할 수 없습니다 (그것에 대해 생각해보십시오, 어떤 인스턴스가 작동할까요?). C#에서는 암시 적으로 this
키워드를 사용하는 것으로 가정합니다 (위의 예는 Form1 frm = MainForm
으로 작성되었을 수 있습니다).
static vs 인스턴스 메소드에 대한 대체 설명은 C# Static Methods을 참조하십시오. 이는 객체 지향 프로그래밍에서 중요한 개념으로 올바르게 이해해야합니다. 당신의 예에서
당신은 아마는 (정적 선언을 제거하여) 인스턴스 메서드에 DoActions
을 변경하려면 :
public void DoActions(string Cmd)
{
if(Cmd == true)
{
this.MainForm.Visible = false;
}
}
이, 그것은 인스턴스 MainForm
필드/속성에 액세스 할 수 있지만이 할 수있다 객체 인스턴스를 제공하지 않고 DoActions
을 다른 정적 메서드에서 호출하려는 위치에서 코드의 다른 부분에서 문제를 일으킬 수 있습니다.
안녕 크레 이건, 설명 주셔서 감사합니다. 이제는 왜 내가 그 문제를 가지고 있는지 이해하게 만들었 어. 내 방법을 정적이 아닌 방법으로 바꿀 것을 제안 해? – Katherina
@Katherina'MainForm'을 정적으로 변경하거나'DoActions'를 정적으로 변경하거나 ('MainForm'에 액세스 할 때 인스턴스를 제공하십시오, 예를 들어'someForm.MainForm') 변경할 수 있습니다. 당신이해야 할 일은 당신의 어플리케이션에 달려 있습니다 - 더 많은 문맥을 알지 못하고이 예제에서 말하기는 어렵습니다. – Justin
안녕하세요 크라 겐, 도움을 주셔서 감사합니다. 지금 제 문제를 해결해 드리겠습니다. 감사! – Katherina