C# winforms의 정적 클래스 변수 범위 문제 - 왜이 코드 비트가 작동하지 않습니까?

StackOverflow https://stackoverflow.com/questions/2054021

문제

WinForms 앱 (MainForm 및 Form2 Say)에는 두 가지 형식이 있습니다. 그들은 둘 다 "getinstance"정적 방법을 통해 Mydataset의 접근을 요구합니다. 문제는 mainform이 인스턴스를 얻은 후에, static "mydataset"변수가 null 인 인스턴스를 얻어야 할 때, 이미 설정되었을 것으로 예상 되는가? 어떤 아이디어?

public class MyDataSet
{
    public static MyDataSet myDataSet;   
       // This was null 2nd call to getInstance

    private DataSet myData = new DataSet();

    public static MyDataSet GetInstance()
    {
        if (myDataSet == null)
        {
            return new MyDataSet();
        }
        else
        {
            return myDataSet;
        }
    }

그래서 정적 "mydataset"변수가 한 번만 인스턴스를 갖는 측면에서 작동하지 않는 것 같습니다.

도움이 되었습니까?

해결책

새로 생성 인스턴스를 MyDataset에 할당하는 것을 잊었습니다.

if(myDataSet == null)
{
    myDataSet = new MyDataSet();
}
return myDataSet

다른 팁

당신은 설정하지 않았습니다 myDataSet

이것은 올바른 코드입니다.

public class MyDataSet
{
    public static MyDataSet myDataSet;   
       // This was null 2nd call to getInstance

    private DataSet myData = new DataSet();

    public static MyDataSet GetInstance()
    {
        if (myDataSet == null)
        {
            myDataSet =new MyDataSet();
        }

            return myDataSet;

    }
public class MyDataSet
{
    public static MyDataSet myDataSet;   
       // This was null 2nd call to getInstance

    private DataSet myData = new DataSet();

    public static MyDataSet GetInstance()
    {
        if (myDataSet == null)
        {
            myDataSet = new MyDataSet();      // Changed at this point
            return myDataSet;
        }
        else
        {
            return myDataSet;
        }
    }

이것을 살펴보십시오 기사 Jon Skeet에서. 다른 사람들이 말했듯이 변수를 설정하지는 않지만보다 강력한 패턴을 구현하거나 싱글 톤을 제거하고 싶을 수도 있습니다. 그것이 당신은 mydataset의 여러 인스턴스를 만들 수 있습니다.

싱글 톤이 필요한 경우 네 번째 또는 다섯 번째 버전으로 갈 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top