0

我無法從基類對象名訪問派生類屬性。使用基類創建對象時無法訪問dervied類屬性

我的動機是我需要消除類中重複的屬性,並需要使用基類名創建對象。

public abstract class Request 
{ 
    public int RequestId { get; set; } 
    public string Reason { get; set; }   
    public bool IsApproved { get; set; } 
    public bool IsRejected { get; set; } 

    public Employee Employee { get; set; } 
} 
public class Permission : Request 
{ 
    public DateTime FromTime { get; set; } 
    public DateTime ToTime { get; set; } 
    public PermissionType PermissionType { get; set; }  
} 
public class Leave: Request 
{ 
    public DateTime FromDate { get; set; } 
    public DateTime ToDate { get; set; } 
    public LeaveType LeaveType { get; set; } 

} 
class Program 
{ 
    static void Main(string[] args) 
    {    

     Request req = new Permission(); 
     req.Reason = 1; 
     req.Reason = "232"; 
     req.FromTime = DateTime.Now; // Here i'm getting error as 'Request does not    contain definition' 
     req.ToTime = DateTime.Now.AddHours(1); // Here i'm getting error as 'Request does not    contain definition' 
    } 
} 

回答

0

類型的reqRequest,即使它被實例化一個Permission

屬性FromTime只存在於Permission而不是基類。

你應該這樣做

Permission p = new Permission(); 
p.FromTime = DateTime.Now; //now works` 

,如果你需要從Permission

((Permission)req).FromTime = ...

+0

Ric - >在哪種情況下,我們需要創建對象,如「Request req = new Permission();」 – Harishankaran

+0

如果您只需要從基礎訪問屬性/方法而無需知道或關心實際的派生類型,例如Permission或Leave,或者創建一個只接受'Request'類型的參數的方法,例如'void DoStuff(Request r ){r.IsApproved = false; }'這將適用於所有派生類型的'​​Request' – Ric

0

使用屬性您要定義的變量爲基礎類,所以她你可以投REQ至Permission將只能訪問peropriedades相同

Permission req = new Permission();