用C#语言

时间:2016-03-12 18:41:13

标签: c# inheritance interface static

我的目标是:

// 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. 继承
  5. 类App是静态的,因此它不能有接口
  6. 我目前的“解决方案”:

    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;
    }
    

    这是漫长,乏味和无聊的。要更新的三个位置插入一个新成员:Interface,_App-class(实现)和静态App-class(对于API用户)。

    1. 我想实现两件事:一个契约,一个接口,它定义了从一个版本到另一个版本的所有主要变化(读取接口,打印到更改日志)。
    2. 制作不得用于API私人用户的内容(内部......)。
    3. 问题是什么?以前做过类似事情的人,你是怎么解决的?或者让我忘记基于接口的更改日志的想法...因为接口需要非静态对象,而我想要静态对象(至少在这个特定对象上,它是静态的!)。

      PS:Atm。我将API的所有公共对象/成员读取到日志,现在是“更改日志”。但是从一个新的API开始,想做点什么......不同。 :)

      编辑:注意;我关心物体在“另一面”的外观,这是一件很重要的事情。调用App-members的API用户应该像这样简单(直接): System.Windows.App.Name; 这意味着“外部类”(或者你想看它)是一个静态对象。

      最后注意:我有几个(12-15)这个“类型”的对象,所以我想要一个优雅的结构,对于所有对象,所有对象都是相似的,所以如果你了解一个对象,你就会知道它们。含义:如果一个对象具有接口,则所有其他对象也具有接口。如果一个对象被命名为“AppConfig”,你可以打赌你的生活,另一个对象也有一个名为“OtherConfig”的类。 :)

1 个答案:

答案 0 :(得分:0)

听起来你正试图尝试不同的口味"同一类。每个人都分享一些共同的功能?如果是这样,我会使用抽象类作为基础而不是接口。然后,从那个派生其他类。与接口不同,抽象类将允许您在父级别提供实现(例如:将对象保存到磁盘或数据库)。您可以在此处阅读更多内容:https://msdn.microsoft.com/en-us/library/sf985hc5.aspx

我也同意菲尔科列夫的观点,这听起来并不像你想要一个静态类。