Rya*_*yan 9 c# design-patterns
我想做以下事情
public abstract class MyAbstractClass
{
public static abstract int MagicId
{
get;
}
public static void DoSomeMagic()
{
// Need to get the MagicId value defined in the concrete implementation
}
}
public class MyConcreteClass : MyAbstractClass
{
public static override int MagicId
{
get { return 123; }
}
}
Run Code Online (Sandbox Code Playgroud)
但是我不能因为你不能拥有静态抽象成员.
我理解为什么我不能这样做 - 对设计的任何建议都能达到同样的效果?
(为了清楚起见 - 我试图提供一个带有抽象基类的库,但是具体的版本必须自己实现一些属性/方法,是的,有充分的理由让它保持静态.)
你根本不能让DoSomeMagic()
当前的设计工作.对MyConcreteClass.DoSomeMagic
源代码的调用将被转换为MyAbstractClasss.DoSomeMagic
IL.它最初被称为使用的事实MyConcreteClass
已经丢失.
您可以考虑使用具有相同方法但是虚拟的并行类层次结构 - 然后将原始类的每个实例与包含先前静态成员的类的实例相关联......并且应该只有一个实例那些.
小智 4
单例模式也许可行吗?描述如何在 C# 中实现单例的 MSDN 文章的链接:
http://msdn.microsoft.com/en-us/library/ff650316.aspx
在您的特定示例中,Singelton 实例可以扩展一个抽象基类,其中包含您的 MagicId。
只是一个想法 :)
归档时间: |
|
查看次数: |
533 次 |
最近记录: |