0

轻微的新手问题。

我有一个付款基类。除了额外的附加功能外,所有这些都具有相同的属性。其中一个属性是 a postUrl。在基类中,这是空的,但在子类中,每个类都有自己的 url。这不应该被允许从类外部访问,它是固定的,不应该改变。我如何去覆盖子类中的属性?

例如

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

我该怎么做呢?

提前致谢

4

3 回答 3

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"; } }
}
于 2012-10-10T13:30:50.050 回答
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"; }
    }
}
于 2012-10-10T13:50:43.027 回答
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") {  }
}
于 2012-11-29T21:09:35.213 回答