gpt4 book ai didi

C# - 使 API 命名空间可见的实习生枚举

转载 作者:行者123 更新时间:2023-12-04 16:57:42 30 4
gpt4 key购买 nike

我正在为现有的软件项目编写 API。我的 API 通常仅用作包装器,并将函数调用直接发送到软件的逻辑。当然,我想避免编写重复的代码。因此,我的问题是如何使内部枚举/类/等对使用 API 的用户可见。

我将通过一个小例子来解释它:

内部逻辑:

namespace internlogic{
public class Log {
public enum Level = {All, Debug, Error, Fatal);

public static SetLogLevel(Level lvl){
...
}
}
}

应用程序接口(interface):
namespace API {
public class APILog {

public SetLogLevel(internlogic.Level lvl)
internlogic.Log.SetLogLevel(lvl);
}
}

外部用户现在仅使用 API 命名空间,我正在寻找他可以使用枚举级别的可能性。是否可以将此枚举包含到 API 命名空间中而不编写“包装器枚举”?我想避免用户必须包含很多不同的命名空间。

外部 API 用户:
using namespace API;

...
Level loglvl = Level.Debug //Its not possible because Level is not in the API namespace
APILog.setLogLevel(loglvl);
...

到目前为止,没有对实现的内部逻辑进行访问控制。

最佳答案

只是为了举个例子。这就是我在评论中的意思,通过制作 API-LogLevel-Enum:

namespace API
{
public enum LogLevel
{
All, Debug, Error, Fatal
}

internal static class LogLevelExtension
{
internal static internlogic.Log.Level GetLevel(this LogLevel level)
{
switch (level)
{
case LogLevel.All:
return internlogic.Log.Level.All;
case LogLevel.Debug:
return internlogic.Log.Level.Debug;
case LogLevel.Error:
return internlogic.Log.Level.Error;
case LogLevel.Fatal:
return internlogic.Log.Level.Fatal;
default:
throw new Exception("This shoudn't happen! : )");
}
}
}
}

你可以这样使用它:
public void DoSomething(LogLevel level)
{
internlogic.Log.Level internLevel = level.GetLevel();
...
}

关于C# - 使 API 命名空间可见的实习生枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28109734/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com