覆盖c#中的基本受保护属性

时间:2012-10-10 13:23:39

标签: c# oop inheritance

轻微的新手问题。

我有一个支付基类。除了额外的额外内容,所有人都拥有相同的属性。其中一个属性是postUrl。在基础中,这是空的,但在子类中,每个类都有自己的URL。不应该允许从类外部访问它并且它已修复且不应更改。我如何在子类中重写该属性?

e.g。

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"; }
    }
}

我将如何做到这一点?

提前致谢

3 个答案:

答案 0 :(得分:7)

如果你使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"; } }
}

答案 1 :(得分:1)

根据您的要求,我建议使用界面,因为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"; }
    }
}

答案 2 :(得分:1)

我知道这是一个迟到的条目,但如果你想让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") {  }
}