簡體   English   中英

用C#語言構造這些對象的替代方法

[英]Alternative way(s) of structuring these objects in C# language

我的目標是遵循以下原則:

// Defines members, for the "change-log" of the API, 
// if the interface has changed, the API has a new major version.
// For "automatically generating changelogs" (for major versions) of the API
interface IApp
{
    static string Name { get; set; }
}

// Internal class, not for usage outside of the dll
internal static class AppConfig
{
    internal static bool IsPublished;
}

// Public available members from the API
public static class App : AppConfig, IApp
{
    public static string Name { get; set; }
}

現在,基於C#語言,上述結構中存在一些錯誤:

  1. 接口不能有靜態成員
  2. App類是靜態的,因此它不能繼承靜態類
  3. AppConfig是靜態的,因此不能從其繼承
  4. App類是靜態的,因此它不能具有接口

我當前的“解決方案”:

public static partial class App
{
    internal static bool IsPublished;
}

public static partial class App
{
    public static string Name { get; set; }
}

我想向其中添加合同/接口...因此,我可能最終會遇到類似“包裝” APP的情況:

public static class App
{
    private static _App app;
    static App()
    {
        app = new _App();
    }
    public static string Name { get { return app.Name;  } }
}

internal interface _IApp
{
    string Name { get; set; }
}

internal class _App : _AppConfig, _IApp
{
    public string Name { get; set; }
}

internal class _AppConfig
{
    internal static bool IsPublished;
}

這是漫長而乏味且無聊的。 在三個要更新的地方插入一個新成員:接口,_App類(實現)和靜態App類(對於API用戶)。

  1. 我要實現兩件事:合同,接口,它定義從一個版本到另一個版本的所有主要更改(讀取接口,打印到更改日志)。
  2. 將不應用於API用戶的內容設為私有(內部...)。

有問題嗎 以前有人做過類似的事情,您是如何解決的? 或者說說讓我忘記基於接口的變更日志的想法...因為接口需要非靜態對象,而我卻需要靜態對象(至少在此特定對象上,它是靜態的!)。

PS:Atm。 我將所有公共對象/ API的成員都讀取到日志中,該日志現在為“ changelog”。 但是從一個新的API開始,想要做一些不同的事情。 :)

編輯:注意; 我關心對象在“另一側”的外觀,這很重要。 API的用戶(調用App成員)應像這樣簡單(直接):System.Windows.App.Name; 這意味着“外部類”(或者您想查看它)是一個靜態對象。

最后一點:我有幾個(12-15)這種“類型”的對象,所以我想要一個優雅的結構,所有對象的名稱都類似,因此,如果您認識一個對象,便會全部了解。 含義:如果一個對象具有一個接口,則其他所有對象也具有一個接口。 如果一個對象名為“ AppConfig”,則可以放心,另一個對象也具有一個名為“ OtherConfig”的類。 :)

聽起來您正在嘗試具有相同類別的不同“風味”。 每個人都有一些共同的功能? 如果是這樣,我將使用抽象類作為基礎而不是接口。 然后,從該類派生其他類。 與接口不同,抽象類將允許您在父級別提供實現(例如:將對象保存到磁盤或數據庫)。 您可以在這里閱讀更多信息: https : //msdn.microsoft.com/en-us/library/sf985hc5.aspx

我也同意Filkolev,這聽起來像您不希望使用靜態類的東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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