2010-05-28 97 views
-1

为什么我在课堂外生成实例。我给继承snifC sinifD我需要在构造函数的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(); 

    } 

错误:无效令牌 '(' 类,结构或接口成员声明

回答

3

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

需要一个方法里面?

你似乎想创建一个对象的实例并在类的主体内调用它的方法,但是你需要在方法内部实现它。

+0

更具体地说,您可以在其声明中创建一个新对象,但不能在其上调用'method3()'。 – Powerlord 2010-05-28 14:25:24

+0

谢谢,我刚刚意识到我写了“创建一个方法的实例”.. tsk tsk! :-) – DaveDev 2010-05-28 14:29:36

2

你不必写在构造函数中的代码,但是你必须写一些方法的代码。你目前只是在你的课程的任何地方写代码。如果你不想创建你的D类的实例来做到这一点,你可以在你的D类中创建一个静态方法来创建C类的实例(甚至可以有一个静态构造函数)。

1

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

1

你并不需要创建sinifC的实例里面 - 通过扩展它使用的是inheritace。

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