的抽象基类,迫使每个派生类是单身 [英] Abstract base class to force each derived classes to be Singleton

查看:99
本文介绍了的抽象基类,迫使每个派生类是单身的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我如何做一个抽象类,不得强迫每一个派生类是单身?我使用C#。

How do I make an abstract class that shall force each derived classes to be Singleton ? I use C#.

推荐答案

当你想enfore表示编译时检查,这是不可能的。随着运行时检查你可以做到这一点。这不是漂亮,但它是可能的。这里有一个例子:

When you want to enfore compile time checking, this is not possible. With runtime checking you can do this. It's not pretty, but it's possible. Here's an example:

public abstract class Singleton
{
    private static readonly object locker = new object();
    private static HashSet<object> registeredTypes = new HashSet<object>();

    protected Singleton()
    {
        lock (locker)
        {
            if (registeredTypes.Contains(this.GetType()))
            {
                throw new InvalidOperationException(
                    "Only one instance can ever  be registered.");
            }
            registeredTypes.Add(this.GetType());
        }
    }
}

public class Repository : Singleton
{
    public static readonly Repository Instance = new Repository();

    private Repository()
    {
    }
}

这篇关于的抽象基类,迫使每个派生类是单身的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆