C# 名称空间相同方法两个位置/quot;名称空间端点“;
我正在制作一个日志库的facade项目/包装器。此包装器将用于多个项目,包括现有项目和新项目 名称空间将类似于C# 名称空间相同方法两个位置/quot;名称空间端点“;,c#,asp.net,inheritance,design-patterns,C#,Asp.net,Inheritance,Design Patterns,我正在制作一个日志库的facade项目/包装器。此包装器将用于多个项目,包括现有项目和新项目 名称空间将类似于Logger.System.Fatal,但由于现有项目使用另一个包装器项目,因此它们使用了Logger.Fatal 因此,对于新方法,我希望能够从名称空间中的两个位置调用相同的方法 但是我该怎么做呢 我希望能够在这两个地方有相同的描述,但是让Logger.Fatal给出不推荐/过时的警告 我曾想过这样做: public class Logger : LogHelper.System {
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);
}
}
公共类记录器:LogHelper.System
{
[过时(“Logger.Trace已弃用,请改用Logger.System.Fatal。”)]
公共静态新无效致命(字符串消息)
{
//以某种方式调用我们从中继承的方法
}
公共类系统:LogHelper.System
{
公共静态新无效致命(字符串消息)
{
//以某种方式调用我们从中继承的方法
}
}
}
公共类日志助手
{
///
///记录一条具有致命错误重要性的消息
///
///要记录的消息
公共虚拟无效致命(字符串消息)
{
//记录消息
logger.Fatal(消息);
}
}
但是我不确定这是否是设计它的正确方法,或者它是否应该作为引用其他方法的普通方法来调用?
我正在寻找一些关于如何设计它的最佳实践建议:)创建两个
Logger
类,一个在“新”名称空间中,包含所有实现。
旧名称空间中的另一个名称空间,继承自新名称空间,具有过时的属性
通过这种方式,您将实现放在正确的位置,在旧名称空间中没有代码,并且为所有目标位于旧位置的人提供了一个过时的警告
namespace Old
{
[Obsolete("Use New.NewLogger instead")]
public class OldLogger : New.NewLogger
{
}
}
namespace New
{
public class NewLogger
{
// All your implementation here.
}
}
如果您需要一些转换(旧的和新的实现在某些方面有所不同),您可以利用继承来完成转换。我不确定,但也许应该问这个问题:“在两个地方都能有相同的描述”-我不确定这是什么意思。你能说得更准确一点吗?否则,我想问一个好问题。这是不是朝着你不想要的方向发展@Djensen@黑手党,我的意思是总结。您在方法上方使用“//”进行的描述/摘要,以填写intellisense中的描述。如果可能的话,我只想把这个摘要放在一个地方。为了保持低代码冗余。@Mafii,使用别名指令将有助于在两个位置公开该方法,但如果使用该指令,我不知道如何将[Observe(“string”)]置于某些方法之上。您阅读了op的注释吗?“如果可能的话,我希望只在一个地方有这个摘要。保持低代码冗余。”这不是op想要的。你不需要对你刚刚继承的方法进行注释。类的摘要必须不同:一个已过时,另一个未过时。AFAICT,这正是OP想要的。。。