Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 名称空间相同方法两个位置/quot;名称空间端点“;_C#_Asp.net_Inheritance_Design Patterns - Fatal编程技术网

C# 名称空间相同方法两个位置/quot;名称空间端点“;

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 {

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

名称空间将类似于
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想要的。。。