簡體   English   中英

需要幫助了解此繼承層次結構

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM