Allow access to but prevent instantiation of a nested class by external classes

后端 未结 2 1866
遇见更好的自我
遇见更好的自我 2021-01-05 01:10

I\'m looking to define a nested class that is accessible to the container class and external classes, but I want to control instantiation of the nested class, such that only

2条回答
  •  执笔经年
    2021-01-05 01:43

    How about abstraction via an interface?

    public class Container
    {
        public interface INested
        {
            /* members here */
        }
        private class Nested : INested
        {
            public Nested() { }
        }
    
        public INested CreateNested()
        {
            return new Nested();  // Allow
        }
    }
    
    class External
    {
        static void Main(string[] args)
        {
            Container containerObj = new Container();
            Container.INested nestedObj;
    
            nestedObj = new Container.Nested();       // Prevent
            nestedObj = containerObj.CreateNested();  // Allow
    
        }
    }
    

    You can also do the same thing with an abstract base-class:

    public class Container
    {
        public abstract class Nested { }
        private class NestedImpl : Nested { }
        public Nested CreateNested()
        {
            return new NestedImpl();  // Allow
        }
    }
    
    class External
    {
        static void Main(string[] args)
        {
            Container containerObj = new Container();
            Container.Nested nestedObj;
    
            nestedObj = new Container.Nested();       // Prevent
            nestedObj = containerObj.CreateNested();  // Allow
    
        }
    }
    

提交回复
热议问题