【问题标题】:Call function of unnamed object in using statement在 using 语句中调用未命名对象的函数
【发布时间】:2019-03-31 23:01:53
【问题描述】:

尝试学习using 语句。如何在tst()函数中调用新创建的未命名对象的add函数:

public class AnswerCmd : IDisposable
{

    public static void tst()
    {
        using (new AnswerCmd())
        {
            //add(5); not works
        }

    }



    public void add(int value)
    {
        //....
    }

    public void Dispose()
    {
        throw new NotImplementedException();
    }

}

【问题讨论】:

    标签: c# .net using-statement


    【解决方案1】:

    因为add不是static,你需要创建一个AnswerCmd的新实例来访问它,像这样:

    using (var instance = new AnswerCmd())
    {
        instance.add(5);
    }
    

    【讨论】:

      【解决方案2】:

      因为tst 函数是静态函数,而add 函数不是。

      如果你想创建一个实例尝试删除static

      public class AnswerCmd : IDisposable
      {
      
          public void add(int value)
          {
      
          }
      
          public void Dispose()
          {
      
          }
      
      }
      

      那么你可以在外面这样使用

      using (var ans = new AnswerCmd())
      {
          ans.add(5);
      }
      

      注意

      删除Dispose函数中的throw new NotImplementedException();否则,离开using时会报错。

      【讨论】:

        【解决方案3】:

        您的代码几乎没问题,但如果您对代码进行更多更改,您就可以做您想做的事。这是您的代码,稍作改动:

        public class AnswerCmd : IDisposable
        {
            public static void tst()
            {
                using (AnswerCmd var = new AnswerCmd())
                {
                    var.add(5);
                }
            }
        
            public void add(int value)
            {
                Console.WriteLine($"Add: {value}");
            }
        
            public void Dispose()
            {
                //throw new NotImplementedException();
            }
        }
        

        你必须在你的 using 语句中声明一个变量 AnswerCmd var 在你的类类型中,然后在创建和分配对象之后,像这样 AnswerCmd var = new AnswerCmd() 调用你的 add 方法像这样 var.add()

        如果您想了解更多关于此以及为什么要这样做的信息,我不得不说这是因为您的 tst 方法是 static 而您的 add 方法是 non -静态。非静态方法仅适用于您的类的对象,当您没有从该类创建对象时,您不能调用它们。当您直接调用非静态方法而不创建对象时,这是一个语法错误。

        您还必须在Dispose 方法中删除或注释throw new NotImplementedException();,因为当您离开使用时,您的方法将抛出和Exception

        如果您访问 this link 并详细了解静态和非静态方法之间的区别,这很好。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-05-08
          • 1970-01-01
          • 1970-01-01
          • 2010-10-22
          • 1970-01-01
          • 2011-05-19
          • 1970-01-01
          相关资源
          最近更新 更多