2013-03-15 43 views
1
[SomeAttribute(typeof(Child))] 
public sealed class Parent 
{ 
    public sealed class Child 
    { 
    } 
} 

這怎麼可能?它會在屬性的實現中破壞一些東西嗎?我只是嵌套Child,因爲我堅持每個文件規則的一個類。如果孩子是在外面定義的,我不需要擔心會打破一些無限循環的屬性。子類對父類定義的屬性是可見的嗎?

+1

這裏的類型解析是相對於被裝飾的東西;所以'typeof(Child)'是在「Parent'的一部分」的上下文中,顯然它可以使用'Child'(不是'Parent.Child')。你是這個意思嗎?我沒有實際的語言參考,注意 - 我只是描述了行爲。 – 2013-03-15 11:47:57

+0

@MarcGravell即使我將Child設爲私有,編譯也很好。 – Monstieur 2013-03-15 11:51:01

+0

這很好; 「家長」仍然可以看到「孩子」;再次,它被解析*相對於'Parent'的上下文* – 2013-03-15 11:52:12

回答

2

回答您的問題:

這怎麼可能?

這與全班的知名度有關。你的Child類是在同一個程序集中,所以SomeAttribute仍然可以訪問它(不管它是內部/私人等)。

它會破壞屬性的實現內的東西嗎?

沒有

我只築巢Child因爲我堅持每個文件規則一類。

技術上可以堅持每則文件規則的1類,因爲現在有2類(如果不考慮它的嵌套與否)。通常你會嵌套一個類,如果它是一個外部類的實現細節,我收集你的情況它不是。

如果Child是一個公共類,然後把它放在它自己的單元中,你在這裏的嵌套的例子沒有獲得任何東西,也沒有任何意義。如果Child類別應該緊密耦合到Parent類別並純粹用於它內部,那麼它應該被標記爲internalprivate

+0

+1用於針對公共嵌套類型推薦。 -1不回答實際問題。 – dtb 2013-03-15 11:44:33

+0

Child是一個包含特定於Parent的驗證規則的類,該屬性實際上是將規則應用於父級的[Validator(typeof(Child))]。這就是爲什麼我不希望它在一個單獨的文件中,並且更容易在同一個文件中維護。 – Monstieur 2013-03-15 11:46:11

+0

它仍然編譯罰款,如果我讓孩子私人。 – Monstieur 2013-03-15 11:49:22