[英]Need help understanding this inheritence hierarchy
我正在尋找一個復雜而通用的遺留框架,我最終將需要對其進行擴展,但是首先只是要簡單地理解它,由於繼承層次結構和結構,我正在努力做到這一點。
這些全部構成WCF服務堆棧內部工作的一部分,處理請求,響應等。
我僅包括類簽名及其構造函數,因為內部功能無關緊要。
public sealed class ProcessDerived : ProcessBase<Filter, RequestExternal, RequestItemExternal, ResponseCallBack, ResponseInternal>
{
public ProcessDerived(ProcessManager Manager) : base(Manager) { }
}
public abstract class ProcessBase<TFilter, TRequestExternal, TRequestItemExternal, TResponseCallBack, TResponseInternal>
: ProcessBaseSync<TFilter, TRequestExternal, TRequestItemExternal, TResponseCallBack, TResponseInternal>
where TFilter : FilterBase
where TRequestExternal : class
where TRequestItemExternal : class
where TResponseCallBack : class
where TResponseInternal : ProcessResponseBase
{
protected ProcessBase(ProcessManager Manager) : base(Manager) { }
}
public abstract class ProcessBaseSync<TFilter, TRequestExternal, TRequestItemExternal, TResponseCallBack, TResponseInternal>
: ProcessBaseCache<TFilter, TRequestExternal, TRequestItemExternal, object, TResponseCallBack, TResponseInternal, CacheKeyBase>
where TFilter : FilterBase
where TRequestExternal : class
where TRequestItemExternal : class
where TResponseCallBack : class
where TResponseInternal : ProcessResponseBase
{
protected ProcessBaseSync(ProcessManager Manager) : base(Manager) { }
}
public abstract class ProcessBaseCache<TFilter, TRequestExternal, TRequestItemExternal, TResponseImmediate, TResponseCallBack, TResponseInternal, TCacheKey>
: IProcess, IProcess<TFilter, TResponseInternal>, IProcess<TResponseCallBack>
where TFilter : FilterBase
where TRequestExternal : class
where TRequestItemExternal : class
where TResponseImmediate : class
where TResponseCallBack : class
where TResponseInternal : ProcessResponseBase
where TCacheKey : CacheKeyBase
{
private ProcessManager _manager;
protected ProcessBaseCache(ProcessManager Manager)
{
_manager = Manager;
}
}
我的主要問題是:
1)用於描述此多重繼承結構的技術術語是什么,如第一行所示:“ ProcessDerived:ProcessBase”。
它使我想起元組,但是我不了解在技術層面上發生了什么。 這僅僅是解決多重繼承限制的一種方法嗎?
2)它是否繼承自“ ProcessBase”以及其旁邊的所有類型參數?
3)向構造函數添加“:base(XYZ)”的目的是什么? 這是否僅僅是匹配類繼承(模仿類簽名的構造函數)的要求? 我不明白為什么要這樣做。
這種復雜的4層層次結構似乎是不必要的,感覺無法遵循。
我顯然在這里缺少一些基本的C#知識。
要回答第一個(和第二個)問題,可以擴展單個基類,然后實現多個接口,但是發布的代碼僅擴展單個基類。 碰巧ProcessBase
接受5種不同的類型,但這仍然是一類。
至於你的第三個問題,他們增加了base
,因為類擴展了沒有參數的構造函數的基類。
這是一個演示相同概念的簡單示例。 Person
類只有一個期望名稱的ctor,因此任何擴展它的類都必須通過調用base()
來提供該參數。
public class Person
{
public string Name { get; set; }
public Person(string name)
{
Name = name;
}
}
public class Employee : Person
{
public DateTime HireDate { get; set; }
public Employee(string name, DateTime hireDate) : base(name)
{
HireDate = hireDate;
}
}
1)用於描述此多重繼承結構的技術術語是什么,如第一行所示:“ ProcessDerived:
ProcessBase
。
那是單一繼承。 ProcessDerived
繼承自ProcessBase<Filter, RequestExternal, RequestItemExternal, ResponseCallBack, ResponseInternal>
。
2)它是否繼承自“ ProcessBase”以及其旁邊的所有類型參數?
ProcessBase<Filter, RequestExternal, RequestItemExternal, ResponseCallBack, ResponseInternal>
是(封閉的通用)類型。 ProcessDerived繼承自它。
ProcessBase<TFilter, TRequestExternal, TRequestItemExternal, TResponseCallBack, TResponseInternal>
是對應的打開通用類型-尚未指定類型參數TFilter
等。
3)向構造函數添加“:base(XYZ)”的目的是什么? 這是否僅僅是匹配類繼承(模仿類簽名的構造函數)的要求? 我不明白為什么要這樣做。
當子類實例化時,它需要調用基類的構造函數之一。 如果基類具有無參數構造函數,則將其隱式調用。 如果不是,則需要使用: base(...)
來顯式調用其構造函數之一,並傳遞所有必需的參數。
我顯然在這里缺少一些基本的C#知識。
我懷疑您缺少有關泛型的知識-您似乎認為泛型和泛型類型參數與繼承有關。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.