반응형
C #의 정적 메서드에서 비 정적 메서드를 호출하려면 어떻게해야합니까?
다음 코드가 data1()
있습니다 data2()
.. C #에서 가능합니까? 그렇다면 어떻게?
private void data1()
{
}
private static void data2()
{
data1(); //generates error
}
클래스의 인스턴스를 만들고 그에 대한 메서드를 호출해야합니다.
public class Foo
{
public void Data1()
{
}
public static void Data2()
{
Foo foo = new Foo();
foo.Data1();
}
}
아마도 당신이 찾고있는 것은 Singleton 패턴일까요?
public class Singleton
{
private Singleton() {}
public void DoWork()
{
// do something
}
// You can call this static method which calls the singleton instance method.
public static void DoSomeWork()
{
Instance.DoWork();
}
public static Singleton Instance
{
get { return instance; }
}
private static Singleton instance = new Singleton();
}
여전히 클래스의 인스턴스를 만들어야하지만 인스턴스 가 하나만 있는지 확인 합니다.
정적 메서드 내에서 해당 클래스의 인스턴스를 만든 다음 호출해야합니다.
예를 들면 다음과 같습니다.
public class MyClass
{
private void data1()
{
}
private static void data2()
{
MyClass c = new MyClass();
c.data1();
}
}
부모 클래스의 인스턴스를 먼저 생성하지 않으면 비 정적 메서드를 호출 할 수 없습니다.
따라서 정적 메서드에서 새 개체를 인스턴스화해야합니다.
Vehicle myCar = new Vehicle();
... 비 정적 메서드를 호출합니다.
myCar.Drive();
객체 참조 만 제공하면됩니다. 직위에 클래스 이름을 입력하십시오.
private static void data2()
{
<classname> c1 = new <classname>();
c1. data1();
}
아주 오래된 스레드에 대한 답변을 게시하는 데 사과했지만 내 답변이 다른 사람에게 도움이 될 것이라고 생각합니다.
대리인의 도움으로 같은 일을 할 수 있습니다.
public class MyClass
{
private static Action NonStaticDelegate;
public void NonStaticMethod()
{
Console.WriteLine("Non-Static!");
}
public static void CaptureDelegate()
{
MyClass temp = new MyClass();
MyClass.NonStaticDelegate = new Action(temp.NonStaticMethod);
}
public static void RunNonStaticMethod()
{
if (MyClass.NonStaticDelegate != null)
{
// This will run the non-static method.
// Note that you still needed to create an instance beforehand
MyClass.NonStaticDelegate();
}
}
}
data1()
과 둘 다 data2()
동일한 클래스에 있다고 가정하면 또 다른 대안은 data1()
정적 으로 만드는 것 입니다.
private static void data1()
{
}
private static void data2()
{
data1();
}
정적 메서드는 비 정적 메서드 호출을 직접 허용하지 않습니다.
이유 : 정적 메서드는 해당 클래스에만 속하고 개체 또는 인스턴스에 속하지 않습니다.
따라서 동일한 클래스 내의 정적 메서드에서 비 정적 메서드에 액세스하려고 할 때마다 다음을 받게됩니다.
"비 정적 필드, 메서드 또는 속성에 대한 개체 참조가 필요합니다."
솔루션 : 다음과 같이 참조를 선언하십시오.
public class <classname>
{
static method()
{
new <classname>.non-static();
}
non-static method()
{
}
}
다음과 같이 호출 메소드를 사용할 수 있습니다. Foo.Data2 ()
public class Foo
{
private static Foo _Instance;
private Foo()
{
}
public static Foo GetInstance()
{
if (_Instance == null)
_Instance = new Foo();
return _Instance;
}
protected void Data1()
{
}
public static void Data2()
{
GetInstance().Data1();
}
}
반응형
'Programing' 카테고리의 다른 글
Oracle SQL Developer 및 PostgreSQL (0) | 2020.12.10 |
---|---|
모든 ASP.NET Web API 컨트롤러가 404를 반환합니다. (0) | 2020.12.10 |
DateTime.Parse가 UTC 날짜를 구문 분석 할 수없는 이유 (0) | 2020.12.10 |
복합 기본 키가 여전히 존재하는 이유는 무엇입니까? (0) | 2020.12.10 |
$ _GET이 있는지 확인하는 방법은 무엇입니까? (0) | 2020.12.10 |