C# - 加载继承类
问题描述:
我有一个类叫做FieldDesc
。C# - 加载继承类
public class FieldDesc {
public FieldDesc() {
}
}
我也有另一个类,从FieldDesc
称为StandardHoursByCommunitySvcType
继承。
public class StandardHoursByCommunitySvcType: FieldDesc {
public StandardHoursByCommunitySvcType() {
}
}
在我控制我 -
FieldDesc aTable;
aTable = new FieldDesc();
String TableName = "StandardHoursByCommunitySvcType";
我有什么做的就是aTable
知道这是StandardHoursByCommunitySvcType
类型的对象?
答
如果您有两个类别
public class FieldDesc
{
public FieldDesc()
{
}
public void A()
{
}
public virtual void V()
{
Console.WriteLine("V from FieldDesc");
}
}
public class StandardHoursByCommunitySvcType : FieldDesc
{
public StandardHoursByCommunitySvcType()
{
}
public void B()
{
}
public overrides void V()
{
Console.WriteLine("V from StandardHoursByCommunitySvcType");
}
}
你可以做到这一点
FieldDesc fd = new StandardHoursByCommunitySvcType();
StandardHoursByCommunitySvcType svc = new StandardHoursByCommunitySvcType();
fd.A(); // OK
fd.B(); // Fails (does not compile)
((StandardHoursByCommunitySvcType)fd).B(); // OK
fd.V(); // OK, prints "V from StandardHoursByCommunitySvcType"
svc.A(); // OK
svc.B(); // OK
svc.V(); // OK, prints "V from StandardHoursByCommunitySvcType"
派生类是基类分配兼容;然而,通过一个类型为基类的变量来访问,你将只能看到基类的成员。
答
您可以使用is运算符来找出这
if(someObject is StandardHoursByCommunitySvcType)
{
//it means is is object of StandardHoursByCommunitySvcType type
}
+0
我欣赏所有的输入,但如果我想声明一个特定于子类的对象,我可以实例化该子类。我试图从控制中抽象出这个规范。有没有办法使用TableName来指定要使用哪个子类? – 2012-02-20 18:07:01
答
你的问题还不清楚。你是否试图将一个表声明为StandardHoursByCommunitySvcType或试图确定它是否已被声明为一个?
如果你想声明:
FieldDesc aTable;
aTable = new StandardHoursByCommunitySvcType();
为StandardHoursByCommunitySvcType从FieldDesc
继承会只要工作。如果你想确定类型:
if(aTable is StandardHoursByCommunitySvcType)
{
//Do something
}
它不是“StandardHoursByCommunitySvcType”的对象。您将其声明为'new FieldDesc()' – 2012-02-20 17:50:29
您必须分配'aTable = new StandardHoursByCommunitySvcType()'。否则无法将其转换为StandardHoursByCommunitySvcType – MarcinJuraszek 2012-02-20 17:50:54
在您的代码示例中,'aTable'将始终为'FieldDesc'类型,因为它的构造方式如此。你想在这里实现什么目标? – Bernard 2012-02-20 17:53:02