C#嵌套类/结构可见性

Ols*_*dev 3 c# syntax struct nested class

我试图弄清楚实现某个API目标的正确语法是什么,但是我正在努力实现可见性.

我希望能够Messenger像访问实例的成员一样msgr.Title.ForSuccesses.

但是,我不希望能够Messenger.Titles从我的Messenger课外实例化.

我也愿意制作Messenger.Titles一个结构.

我猜我需要某种工厂模式或其他东西,但我真的不知道我该怎么做.

见下文:

class Program {
    static void Main(string[] args) {
        var m = new Messenger { Title = { ForErrors = "An unexpected error occurred ..." } }; // this should be allowed
        var t = new Messenger.Titles(); // this should NOT be allowed
    }
}

public class Messenger {
    // I've tried making this private/protected/internal...
    public class Titles {
        public string ForSuccesses { get; set; }
        public string ForNotifications { get; set; }
        public string ForWarnings { get; set; }
        public string ForErrors { get; set; }

        // I've tried making this private/protected/internal as well...
        public Titles() {}
    }

    public Titles Title { get; private set; }
    public Messenger() {
        Title = new Titles();
    }
}
Run Code Online (Sandbox Code Playgroud)

Kon*_*hin 7

你只需要将标题设为私有并公开界面而不是它.


class Program {
    static void Main(string[] args) {
        var m = new Messenger { Title = { ForErrors = "An unexpected error occurred ..." } }; // this is allowed
        var t = new Messenger.Titles(); // this is NOT allowed
    }
}

public class Messenger {
    public interface ITitles {
        string ForSuccesses { get; set; }
        string ForNotifications { get; set; }
        string ForWarnings { get; set; }
        string ForErrors { get; set; }
    }

    private class Titles : ITitles {
        public string ForSuccesses { get; set; }
        public string ForNotifications { get; set; }
        public string ForWarnings { get; set; }
        public string ForErrors { get; set; }
    }

    public ITitles Title { get; private set; }
    public Messenger() {
        Title = new Titles();
    }
}