在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...";
但我一直得到一个空错误......这里......
答案 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
是一个类,而my3rdFoo
是foo3
类的一个实例,你可以设置它的属性。
答案 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。