2012-02-20 85 views
0

我有一个类叫做FieldDescC# - 加载继承类

public class FieldDesc { 
    public FieldDesc() { 
    } 
} 

我也有另一个类,从FieldDesc称为StandardHoursByCommunitySvcType继承。

public class StandardHoursByCommunitySvcType: FieldDesc { 
    public StandardHoursByCommunitySvcType() { 
    } 
} 

在我控制我 -

FieldDesc aTable; 
aTable = new FieldDesc(); 

String TableName = "StandardHoursByCommunitySvcType"; 

我有什么做的就是aTable知道这是StandardHoursByCommunitySvcType类型的对象?

+3

它不是“StandardHoursByCommunitySvcType”的对象。您将其声明为'new FieldDesc()' – 2012-02-20 17:50:29

+1

您必须分配'aTable = new StandardHoursByCommunitySvcType()'。否则无法将其转换为StandardHoursByCommunitySvcType – MarcinJuraszek 2012-02-20 17:50:54

+0

在您的代码示例中,'aTable'将始终为'FieldDesc'类型,因为它的构造方式如此。你想在这里实现什么目标? – Bernard 2012-02-20 17:53:02

回答

0

如果您有两个类别

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" 

派生类是基类分配兼容;然而,通过一个类型为基类的变量来访问,你将只能看到基类的成员。

0

您可以使用is运算符来找出这

if(someObject is StandardHoursByCommunitySvcType) 
    { 
     //it means is is object of StandardHoursByCommunitySvcType type 
    } 
+0

我欣赏所有的输入,但如果我想声明一个特定于子类的对象,我可以实例化该子类。我试图从控制中抽象出这个规范。有没有办法使用TableName来指定要使用哪个子类? – 2012-02-20 18:07:01

2

你的问题还不清楚。你是否试图将一个表声明为StandardHoursByCommunitySvcType或试图确定它是否已被声明为一个?

如果你想声明:

FieldDesc aTable; 
aTable = new StandardHoursByCommunitySvcType(); 

为StandardHoursByCommunitySvcType从FieldDesc

继承会只要工作。如果你想确定类型:

if(aTable is StandardHoursByCommunitySvcType) 
{ 
    //Do something 
}