【发布时间】: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