【问题标题】:why can not create instance from any class out side of constructor?为什么不能从构造函数之外的任何类创建实例?
【发布时间】:2010-05-28 14:07:06
【问题描述】:

为什么我在类之外生成实例。我给 sinifD 继承 snifC 我需要在构造函数之外的 SinifD 中创建实例 sinifC sinifc= new sinifC()?

  public  class sinifC
    {
       public  void method3()
        {
            Console.WriteLine("Deneme3");
        }
    }

   public class sinifD : sinifC
    {
        void method4()
        {
            Console.WriteLine("Deneme4");
        }

        public sinifD()
        {
            sinifC sinifc = new sinifC();
            sinifc.method3();
        }
    }

我想在下面做:


    public  class sinifC
    {
       public  void method3()
        {
            Console.WriteLine("Deneme3");
        }
    }

   public class sinifD : sinifC
    {
        void method4()
        {
            Console.WriteLine("Deneme4");
        }


            sinifC sinifc = new sinifC();
            sinifc.method3();

    }

错误:类、结构或接口成员声明中的标记“(”无效

【问题讨论】:

    标签: c# .net visual-studio oop


    【解决方案1】:

    没有

            sinifC sinifc = new sinifC();
            sinifc.method3();
    

    需要在方法内部?

    您似乎想创建一个对象的实例并在类的主体内调用它的方法,但您需要让它发生在方法内。

    【讨论】:

    • 更具体地说,您可以在其声明中创建一个新对象,但不能在其上调用method3()。
    • 谢谢,我刚刚意识到我写的“创建方法的实例”.. 啧啧! :-)
    【解决方案2】:

    您不必在构造函数中编写代码,但您必须在某些方法中编写代码。您目前只是在课堂上的任何地方编写代码。如果您不想创建 D 类的实例来执行此操作,您可以在 D 类中创建一个静态方法来创建 C 类的实例(您甚至可以有一个静态构造函数)。

    【讨论】:

      【解决方案3】:

      类主体中唯一有效的指令是声明(可选地包括字段的初始化)。方法调用在这里不是有效指令,它必须在方法内部

      【讨论】:

        【解决方案4】:

        您不需要创建 sinifC 的实例 - 您通过扩展继承来使用它。

        class Program
        {
            static void Main(string[] args)
            {
                sinifD s = new sinifD();
        
                // call method3 on sinfiD
                s.method3();
            }
        }
        
        public  class sinifC
        {
           public  void method3()
            {
                Console.WriteLine("Deneme3");
            }
        }
        
        public class sinifD : sinifC
        {
            // sinifD inheritrs mehtod3 from sinifD
        
            // method 4 is protected, so only classes in the class hierachy see that method
            void method4()
            {
                Console.WriteLine("Deneme4");
            }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-11-24
          • 2013-05-21
          • 1970-01-01
          • 1970-01-01
          • 2017-11-09
          • 1970-01-01
          • 2012-01-26
          相关资源
          最近更新 更多