[英]C# abstract base class - extending the implementation
我有以下情況:
public class GeoLocation
{
public double Longitude { get; set; }
public double Latitude { get; set; }
public string LocationName { get; set; }
}
public abstract class Base
{
public abstract GeoLocation GeoLocation { get; set; }
}
public class Concrete : Base
{
public override GeoLocation GeoLocation
{
get;
set;
}
}
現在,如果我創建一個繼承自Base
的類Concrete2
,並且我希望GeoLocation
對象還有一個屬性:
public string Address{ get; set; }
實現這個的最佳方法是什么?
我可以創建一個名為GeoLocationEx : GeoLocation
的新類GeoLocationEx : GeoLocation
並在那里放置Address
屬性但是在我的Concrete2對象中,我將有2個屬性: GeoLocation
和GeoLocationEx
我不喜歡...
我也可以使GeoLocation類局部化,並使用Concrete2
類的Address
屬性擴展它,但我不確定這是否是對部分類的“正確”使用。
什么是最好的方法呢?
在此先感謝您的幫助!
你可以使用泛型:
public class GeoLocation
{
public double Longitude { get; set; }
public double Latitude { get; set; }
public string LocationName { get; set; }
}
public class GeoLocationEx : GeoLocation
{
public double Address { get; set; }
}
public abstract class Base<T>
{
public abstract T GeoLocation { get; set; }
}
public class Concrete : Base<GeoLocation>
{
public override GeoLocation GeoLocation
{
get;
set;
}
}
public class Concrete2 : Base<GeoLocationEx>
{
public override GeoLocationEx GeoLocation
{
get;
set;
}
}
public class GeoLocation
{
public GeoLocation(GeoLocation obj) {/* implement a copy constructor */}
public GeoLocation() {/* default constructor */}
public double Longitude { get; set; }
public double Latitude { get; set; }
public string LocationName { get; set; }
}
public class GeoLocationEx : GeoLocation
{
public string Address { get; set; }
}
public abstract class Base
{
public abstract GeoLocation GeoLocation { get; set; }
}
public class Concrete2 : Base
{
private GeoLocationEx _geoLocation;
public override GeoLocation GeoLocation
{
get { return _geoLocation; }
set
{
_geoLocation = new GeoLocationEx(value);
}
}
}
現在在Concrete2
類中,您可以直接使用私有GeoLocationEx
字段。 此外,您可以為Concrete2
特定的東西公開其他公共方法。
有關編寫復制構造函數的信息,請參閱MSDN: http : //msdn.microsoft.com/en-us/library/ms173116(v = vs。80).aspx
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.