【问题标题】:Namespace same method two places/"namespace endpoints"命名空间相同方法两个地方/“命名空间端点”
【发布时间】:2017-04-10 06:39:10
【问题描述】:

我正在为日志库制作外观项目/包装器。此包装器将用于多个项目,包括现有项目和新项目。

命名空间将类似于Logger.System.Fatal,但由于现有项目过去使用另一个包装项目,他们使用Logger.Fatal

所以对于新方法,我希望能够从命名空间中的两个位置调用相同的方法。

但是我该怎么做呢?

我希望能够在两个地方都有相同的描述,但让Logger.Fatal 给出一个弃用/过时的警告。

我想过这样做:

public class Logger : LogHelper.System
{
    [Obsolete("Logger.Trace is deprecated, use Logger.System.Fatal instead.")]
    public static new void Fatal(string message)
    {
        //somehow call the method that we are inheriting from
    }
    public class System : LogHelper.System
    {
        public static new void Fatal(string message)
        {
            //somehow call the method that we are inheriting from
        }
    }
}

public class LogHelper
{
    /// <summary>
    /// Logs a message with the importance of Fatal
    /// </summary>
    /// <param name="message">The message to log</param>
    public virtual void Fatal(string message)
    {
        //log the message
        logger.Fatal(message);
    }
}

但我不确定这是否是设计它的正确方法,或者它是否应该被称为引用另一个的普通方法? 我正在寻找一些关于如何设计它的最佳实践建议:)

【问题讨论】:

  • 我不确定,但也许应该在Software Engineering 上问这个问题?
  • “能够在两个地方都有相同的描述” - 我不确定你的意思。你能说得更准确一点吗?否则,很好的问题imo。
  • 这是朝着你不想@Djensen的方向发展吗? msdn.microsoft.com/en-US/library/aa664765(v=vs.71).aspx
  • @Mafii,我的意思是总结。您在方法上方使用“///”进行的描述/摘要,以填写智能感知中的描述。如果可能的话,我想把这个摘要放在一个地方。保持低代码冗余。
  • @Mafii,使用别名指令将有助于在两个地方公开该方法,但我不明白如何将 [obsolete("string")] 放在某些方法之上,如果使用那个。

标签: c# asp.net inheritance design-patterns


【解决方案1】:

创建两个Logger 类,一个在“新”命名空间中,包含所有实现。 旧命名空间中的另一个,继承自新命名空间,具有Obsolete 属性。

通过这种方式,您可以在正确的位置实现实现,旧名称空间中没有代码,并且针对所有针对旧位置的人发出过时警告。

namespace Old
{
    [Obsolete("Use New.NewLogger instead")]
    public class OldLogger : New.NewLogger
    {
    }
}

namespace New
{
    public class NewLogger
    {
        // All your implementation here.
    }
}

如果您需要一些转换(旧的和新的实现在某些方面有所不同),您可以利用继承来做到这一点。

【讨论】:

  • 你读过 op 的 cmets 吗? “如果可能的话,我希望只将这个摘要放在一个地方。以保持低代码冗余。”这不是 op 想要的。
  • 您只是继承的方法不需要 cmets。类的摘要必须不同:一个是过时的,另一个不是。 AFAICT,这正是 OP 想要的……
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-31
  • 1970-01-01
相关资源
最近更新 更多