Problema de escopo variável de classe estática em C# WinForms - Por que esse bit de código não funciona?

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

Pergunta

Eu tenho duas formas diferentes no meu aplicativo Winforms (Mainform e Form2 Say). Ambos pedem um acesso ao MyDataset, através de um método estático "GetInstance". O problema é que o Mainform tiver uma instância, quando o Form2 precisa obter uma instância a variável estática "MyDataset" é nula, enquanto eu espero que já tenha sido definido? Alguma ideia?

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;
        }
    }

Então, quase parece que a variável estática "myDataset" não está funcionando em termos de apenas ter uma instância uma vez?

Foi útil?

Solução

you forgot to assign the newly create instance to myDataset

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

Outras dicas

You didn't set myDataSet

This is the correct code:

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;
        }
    }

Take a look at this article from Jon Skeet. As others have said you are not setting the variable but you might also want to implement a more robust pattern, or perhaps get rid of the singleton. As it is you could end up multiple instances being created of MyDataSet.

I would go with the fourth or fifth version, if you need a singleton.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top