c# - 需要解决方法来限制 Facebook Flux 的 .NET 实现的虚拟、抽象静态成员

标签 c# clr flux fody

我研究了 .NET 中的许多 Flux 实现,并认为 this approach相当膨胀:

  • 它使用静态成员而不是枚举,使 XAML 更好
  • 无需在枚举类型之间进行转换(更简洁的代码)
  • 与几乎所有发布/订阅机制轻松集成。

话虽这么说,我想保留静态属性到字符串编码技术,但我无法完成以下工作:

public class BitnameTypesBase
{
   // I want to override this in base classes.. but can't 
    public static string ChainName;

    public static string GET_BITNAME = "get_bitname_" + ChainName;
    public static string SEND_BITNAME = "send_bitname_" + ChainName;
    public static string QUERY_BITNAME = "query_bitname_" + ChainName;
}

public class BitcoinBitName :  BitnameTypesBase
{
   // Ouch, can't override field or properties 
    override public static string ChainName = "Bitcoin";

    public static string MySpecialAction = "special_bitname_" + ChainName;
}

public class OthercoinBitName :  BitnameTypesBase
{
   // Ouch, can't override field or properties
    override public static string ChainName = "something new";

    public static string MySpecialAction = "special_bitname_" + ChainName;
}

问题

  • 语言中是否有允许这样做的内容?
  • 我可以做任何预编译脚本来允许这样做吗?
  • 是否有任何可以帮助我使用的 Fody 插件(我没有看到)

最佳答案

您无法覆盖 static 成员,但可以使用 new 隐藏它们修饰符。例如:

public class BitnameTypesBase
{
    public static string ChainName;

    public static string GET_BITNAME = "get_bitname_" + ChainName;
    public static string SEND_BITNAME = "send_bitname_" + ChainName;
    public static string QUERY_BITNAME = "query_bitname_" + ChainName;
}

public class BitcoinBitName :  BitnameTypesBase
{
    public static new string ChainName = "Bitcoin";
    public static string MySpecialAction = "special_bitname_" + ChainName;
}

public class OthercoinBitName : BitnameTypesBase
{
    public static new string ChainName = "something new";
    public static string MySpecialAction = "special_bitname_" + ChainName;
}

现在:

Console.WriteLine(BitcoinBitName.MySpecialAction);
Console.WriteLine(OthercoinBitName.MySpecialAction);

将输出:

special_bitname_Bitcoin
special_bitname_something new

关于c# - 需要解决方法来限制 Facebook Flux 的 .NET 实现的虚拟、抽象静态成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45661450/

相关文章:

c# - 带有 Lambda 语句的 IQueryable 返回类型

java - 您可以在 Windows 服务器上运行多个 clr 实例吗?

flash - 如何为 Sprite 设置动画?

javascript - 套接字在Flux单向数据流中的适合位置是什么?

c# - 如何在 C# 中将 midi 转换为 wav/mp3?

c# - 使用相同的 tcpclient 进行读/写并保持事件状态

c# - C# 编译器是否为引用类型(如果未指定)或 CLR 提供默认构造函数?

C# 应用程序域到底是什么?

javascript - Redux 的 Connect 函数如何确定我的状态在哪里?

c# - 从托管包装器重定向 native DLL stdout/stderr