2012-10-10 42 views
0

轻微的新手问题。覆盖基地受保护的财产在c#

我有一个支付基类。除额外的额外费用外,所有人都享有相同的财产。其中一个属性是postUrl。在基地这是空的,但在子类中,每个人都有自己的网址。这不应该被允许从课堂外访问,它是固定的,不应该改变。我如何去重写孩子课的财产?

例如

class paymentBase 
{ 
    public int transactionId {get;set;} 
    public string item {get;set;} 
    protected virtual postUrl = String.empty; // can't be accessed from outside inheritance/public/protected? 

    public void payme(); 
} 

class paymentGateWayNamePayment : paymentBase 
{ 
    protected override postUrl { 
     get { return "http://myurl.com/payme"; } 
    } 
} 

我该如何去做这件事?

在此先感谢

+5

这不是一个属性 - 它是一个领域。请发布可以逐字复制并编译而不用更改的代码。 – Oded

+0

你也应该使基类抽象。 – Servy

回答

6

你应该能够完成它,如果你让你的postUrl实际的虚拟财产,是这样的:

class paymentBase 
{ 
    public int transactionId {get;set;} 
    public string item {get;set;} 
    protected virtual postUrl { get { return String.Empty; }} 

    public void payme(); 
} 

class paymentGateWayNamePayment : paymentBase 
{ 
    protected override postUrl {get { return "http://myurl.com/payme"; } } 
} 
0

根据您的要求,我会建议使用,因为接口posturl是一个通用属性,可用于任何事情,例如一个页面回发,一个控制帖子回来,你的班级可能会使用它等。 这个接口可以根据需要使用任何类。

interface IPostUrl 
{ 
    string postUrl { get; } 
} 

class paymentBase 
{ 
    public int transactionId {get;set;} 
    public string item {get;set;} 
    public void payme(){} 
} 

class paymentGateWayNamePayment : paymentBase, IPostUrl 
{ 
    public string postUrl 
    { 
     get { return "http://myurl.com/payme"; } 
    } 
} 
0

我知道这是一个迟到的条目,但如果你想在子类中设置的postUrl值一次,然后再也你需要使它成为一个私有值的基类。

abstract class paymentBase 
{ 
    public paymentBase(string postUrl) { this.postUrl = postUrl; } 
    public int transactionId { get; set; } 
    public string item { get; set; } 
    protected string postUrl { get; private set; } 

    public void payme(); 
} 

class paymentGateWayNamePayment : paymentBase 
{ 
    public paymentGateWayNamePayment() : base("http://myurl.com/payme") { } 
}