C#中抽象单例类的孙子代

在抽象类和单例上做一些工作,我遇到了StackOverflow的许多有用资源。但是,我仍然对单身人士班的孙辈有疑问。


我的单例代码看起来像这样,取自关于如何抽象单例类的答案?,看起来像这样:


public abstract class Singleton<T> where T : Singleton<T>

{

    private static readonly Lazy<T> _instance;


    static Singleton()

    {

        _instance = new Lazy<T>(() =>

        {

            try

            {

                // Binding flags include private constructors.

                var constructor = typeof(T).GetConstructor(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, Type.EmptyTypes, null);

                return (T)constructor.Invoke(null);

            }

            catch (Exception exception)

            {

                throw new SingletonConstructorException(exception);

            }

        });

    }

    public static T Instance { get { return _instance.Value; } }

}

我的此类孩子是使用以下语法创建的:


public class SingletonChild : Singleton<SingletonChild>

{

    [code]

}

现在,我的问题就在这里:一个人如何声明一个孩子类别的孩子,或一个单身人士的孙子?


我相信这是这两者之一,但是我不确定哪一个:


public class SingletonGrandChild : SingletonChild { [code] }

或者


public class SingletonGrandChild : SingletonChild<SingletonGrandChild> { [code] }

谁能提供一些有关其见解的见解?谢谢!


呼如林
浏览 243回答 2
2回答

ITMISS

在对继承进行建模时,子类将考虑父类的class定义以创建继承关系。在您的情况下,正确的答案是:public&nbsp;class&nbsp;SingletonGrandChild&nbsp;:&nbsp;SingletonChild&nbsp;{&nbsp;[code]&nbsp;}由于SingletonChild在其类定义中未声明泛型,因此从其继承时无需这样做(实际上这样做会导致编译错误)。我不确定您要通过此设置完成哪些操作,但是无论如何,我希望此信息对您的整体理解有所帮助。
打开App,查看更多内容
随时随地看视频慕课网APP