我見過的聲明與internal
改性劑一類的一些C#代碼,用public
構造:什麼在一個內部類的公共構造意味着
internal class SomeClass
{
public SomeClass()
{
}
}
什麼是具有公共構造點,如果整個類的可見性是內部的,那麼只能在定義的程序集內部才能看到它?
此外,這是否有任何意義的情況下SomeClass是一個嵌套類?
我見過的聲明與internal
改性劑一類的一些C#代碼,用public
構造:什麼在一個內部類的公共構造意味着
internal class SomeClass
{
public SomeClass()
{
}
}
什麼是具有公共構造點,如果整個類的可見性是內部的,那麼只能在定義的程序集內部才能看到它?
此外,這是否有任何意義的情況下SomeClass是一個嵌套類?
的internal class
範圍覆蓋public MyClass()
構造範圍,使得構造internal
。
在構造函數上使用public
可以更容易地將該類稍後更新爲public
,但會混淆意圖。我不這樣做。
編輯3:我錯過了你的部分問題。如果你的類是嵌套的,那麼這樣做還是很好的。嵌套不能有任何區別,即使它嵌套在公共類中的私有類中(參見C# language specification - 3.5.2 Accessibility domains)。
編輯:而且,如果我還記得,如果構造函數是internal
,它不能作爲一種通用型哪裏有需要where T : new()
的約束,這將需要public
構造(REF C# language specification (version 4.0) - 4.4.3 Bound and unbound types) 。
編輯2:代碼示例演示上述
class Program
{
internal class InternalClass {
internal InternalClass() { }
}
internal class InternalClassPublicCtor {
public InternalClassPublicCtor() { }
}
internal class GenericClass<T>
where T : new() {}
static void Main(string[] args) {
GenericClass<InternalClass> doesNotCompile = new GenericClass<InternalClass>();
GenericClass<InternalClassPublicCtor> doesCompile = new GenericClass<InternalClassPublicCtor>();
}
}
我對混淆意圖有着同樣的想法,除非你有很多構造函數,在更新之後將你的構造函數改爲public並不是太困難,許多重構工具也會提出這個問題 – 2013-05-12 01:21:34
internal關鍵字是類型和類型成員的訪問修飾符。內部成員只能在同一個程序集的文件中訪問。
但是這個問題並沒有問到內部修飾符的作用......? – 2013-05-11 19:07:11
從MSDN - Access Modifiers (C# Programming Guide):
通常,成員的可訪問不大於包含它的類型的可訪問更大。但是,如果成員實現接口方法或覆蓋公共基類中定義的虛擬方法,則可以從程序集外部訪問內部類的公共成員。
因此,例如,如果您有一個公共接口的內部實現,您仍然可以公開某些成員。
此外,假設您突然想讓您的內部課程公開。簡單地更改類中的訪問修飾符比所有成員更容易。
如果使用內部構造函數創建內部UserControl,Win Forms設計器將會出現問題。 – DaveShaw 2013-05-11 18:54:02
將班級上的訪問修飾符想象成一種「主開關」,它可以設置所有班級成員的*最大*可訪問性。 – 2013-05-11 19:01:24
@ChrisMcGrath。很大程度上,我會同意,雖然這個問題也會詢問關於類的嵌套(我在第一次閱讀時錯過了,所以我已經在編輯中解決了我的答案)。 – 2013-05-11 19:37:38