轻微的新手问题。
我有一个支付基类。除了额外的额外内容,所有人都拥有相同的属性。其中一个属性是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"; }
}
}
我将如何做到这一点?
提前致谢
答案 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") { }
}