使用构造函数实例化类

时间:2013-09-19 13:34:02

标签: c# .net

在C#中如何在使用抽象类时实例化一个单独的类? 我正在尝试实例化foo3。

含义:

abstract class foo
{
     public string myId {get;set;}
     public string mystring {get;set;}
     public foo3 my3rdFoo {get;set}
}

class foo2 : foo
{
     public string myFavoriteFoo {get;set;}
}

class foo3
{
     public string myName{get;set}         
}

成功创建新的foo2后....(我没有添加代码。)

我试图使用以下代码调用foo3:

((foo2)newDoc).foo3.myName = "blah...blah...";

但我一直得到一个空错误......这里......

5 个答案:

答案 0 :(得分:3)

在你的情况下,你必须首先实例化一个派生你的抽象类的类--foo2。然后,将新对象分配给要实例化的对象:

var myFoo2 = new foo2();
myFoo2.my3rdFoo = new foo3();

使用对象实例化语法:

var myFoo2 = new foo2{
  my3rdFoo = new foo3()
};

或者将my3rdFoo实例化添加到foo2构造函数:

public foo2(){
  my3rdFoo = new foo3();
}

您无法直接实例化抽象类。

只有在此之后,您才可以为子类的属性赋值。 此外,您应该以大写命名类 - 稍后将更容易区分。

答案 1 :(得分:0)

abstract class foo
{
     public string myId {get;set;}
     public string mystring {get;set;}
     public foo3 my3rdFoo {get;set}
}

class foo2 : foo
{
     public string myFavoriteFoo {get;set;}
}

class foo3:foo2
{
     public string myName{get;set}         
}

使用

实例化
Foo3 myThirdFoo = new foo3();
string result = foo3.myName;

如果你想从foo2里面访问第三个foo,那么使用这个代码

abstract class foo
{
     public string myId {get;set;}
     public string mystring {get;set;}
     public foo3 my3rdFoo {get;set}
}

class foo2 : foo
{
     public foo3 myFavoriteFoo {get;set;}
}

class foo3
{
     public string myName{get;set}         
}

使用如下

foo3 ThirdFoo = new foo3();
ThirdFoo.myName = "Something nice";

foo2 SecondFoo = new foo2(){myFavouriteFoo = ThirdFoo};
String Result = SecondFoo.myFavouriteFoo.myName;

另一种方式是

 abstract class foo
    {
         public string myId {get;set;}
         public string mystring {get;set;}
         public foo3 my3rdFoo {get;set}
    }

    class foo2 : foo
    {
         public foo3 myFavoriteFoo {get;set;}

         public foo2(string myName)
         {
             foo3 = new foo3();
             foo3.myName = myName;

         }

    }

    class foo3
    {
         public string myName{get;set}         
    }

然后使用

访问它
foo2 SecondFoo = new foo2("Something nice");
String Result = SecondFoo.myfavouritefoo.myName;

答案 2 :(得分:0)

我喜欢在构造函数中实例化任何对象。所以考虑到你的代码,我会在基类的默认构造函数中初始化它的“foo3”。

abstract class foo
{
     public foo() { this.my3rdFoo = new foo3(); }
     public string myId {get;set;}
     public string mystring {get;set;}
     public foo3 my3rdFoo {get;set}
}

class foo2 : foo
{
     public string myFavoriteFoo {get;set;}
}

class foo3
{
     public string myName{get;set}         
}

答案 3 :(得分:0)

您的实例化应该看起来像这样

foo2 newDoc = new foo2();

newDoc.myId = "123";
newDoc.mystring = "Hey";

newDoc.my3rdFoo = new foo3(); //move this to a constructor foo() if you would like
newDoc.my3rdFoo.myName = "blah...blah...";

你不能((foo2)newDoc).foo3.myName。相反,它必须是newDoc.my3rdFoo.myName

因为foo3是一个类,而my3rdFoofoo3类的一个实例,你可以设置它的属性。

答案 4 :(得分:0)

您可以在foo3的构造函数中实例化foo对象:

abstract class foo
{
     public string myId {get;set;}
     public string mystring {get;set;}
     public foo3 my3rdFoo {get;set}
     public foo()
     {
          this.my3rdFoo = new foo3();
     }
}

像这样使用:

foo newDoc = new foo2();
newDoc.my3rdFoo.myName = "blah...blah...";

您应该考虑将您的类和属性大写,以便匹配C# conventions