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)
你只需要将标题设为私有并公开界面而不是它.
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();
}
}