我研究了 .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/