2012-02-20 82 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 
}