這可能是編譯器開發中的這些情況之一,當禁止某些東西比允許它的成本更高時。禁止這種使用需要編寫和維護代碼來檢測這種情況,並報告錯誤;如果該功能按原樣工作,這對團隊來說是一項額外的工作,可以避免。畢竟,也許有想象力的人可能會想出使用該功能的方法。
至於一個有用的例子推移,一個潛在用途是使在類另一實現中,並用它作爲一種替代,而不將其暴露於API的用戶:
public class Demo : Demo.Impl {
// Private interface
private interface Impl {
public bool IsValidState {get;}
void DoIt();
}
// Implementation for the error state
private class Error : Impl {
public bool IsValidState { get { return false; } }
public void DoIt() {
Console.WriteLine("Invalid state.");
}
}
private readonly string name;
// Implementation for the non-error state
public bool IsValidState { get { return true; } }
public void DoIt() {
Console.WriteLine("Hello, {0}", name);
}
// Constructor assigns impl depending on the parameter passed to it
private readonly Impl impl;
// Users are expected to use this method and property:
public bool IsValid {
get {
return impl.IsValidState;
}
}
public void SayHello() {
impl.DoIt();
}
// Constructor decides which impl to use
public Demo(string s) {
if (s == null) {
impl = new Error();
} else {
impl = this;
name = s;
}
}
}
至於最佳實踐去了,這種設計充其量也是有問題的。特別是,我會爲非錯誤實現創建第二個嵌套類,而不是爲此目的重用主類。然而,這個設計沒有什麼錯誤(除了事實上,IsValidState
和DoIt
都是可見的),所以C#團隊可以允許這種使用。
[什麼是私有接口?](http://stackoverflow.com/questions/792908/what-is-a-private-interface) –
如果您有嵌套的私有類實現接口,你也許想通過專用接口傳遞'this'或該類的一個實例嗎?相當深奧的東西,但:-) – Haukinger
這是什麼問題?公共類可以實現私人界面嗎?一個類可以實現一個嵌套的接口?只是這兩者的結合? –