C# - 使 API 命名空间可见的实习生枚举
C# - Make a intern enum visible by API namespace
我正在为现有的软件项目编写 API。我的 API 通常只作为包装器工作,将函数调用直接发送到软件逻辑。当然我想避免写重复的代码。因此,我的问题是如何使内部 enumeration/class/etc 对使用 API.
的用户可见
我会用一个小例子来解释它:
内部逻辑:
namespace internlogic{
public class Log {
public enum Level = {All, Debug, Error, Fatal);
public static SetLogLevel(Level lvl){
...
}
}
}
API:
namespace API {
public class APILog {
public SetLogLevel(internlogic.Level lvl)
internlogic.Log.SetLogLevel(lvl);
}
}
外部用户现在仅使用 API-命名空间,我正在寻找他可以使用枚举级别的可能性。是否可以在不写 "wrapper enum" 的情况下将此枚举包含到 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();
...
}
我正在为现有的软件项目编写 API。我的 API 通常只作为包装器工作,将函数调用直接发送到软件逻辑。当然我想避免写重复的代码。因此,我的问题是如何使内部 enumeration/class/etc 对使用 API.
的用户可见我会用一个小例子来解释它:
内部逻辑:
namespace internlogic{
public class Log {
public enum Level = {All, Debug, Error, Fatal);
public static SetLogLevel(Level lvl){
...
}
}
}
API:
namespace API {
public class APILog {
public SetLogLevel(internlogic.Level lvl)
internlogic.Log.SetLogLevel(lvl);
}
}
外部用户现在仅使用 API-命名空间,我正在寻找他可以使用枚举级别的可能性。是否可以在不写 "wrapper enum" 的情况下将此枚举包含到 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();
...
}