比方說,我有MyMethod
隱藏(?)類上的myMessage
屬性此我不應該得到一個編譯器警告嗎?我如何啓用它?
public class MyClass
{
public string myMessage { get; set; }
void MyMethod()
{
string myMessage;
}
}
不應該我得到myMessage
警報?我沒有得到任何東西,當我建立這種效果。我如何激活此檢查?
比方說,我有MyMethod
隱藏(?)類上的myMessage
屬性此我不應該得到一個編譯器警告嗎?我如何啓用它?
public class MyClass
{
public string myMessage { get; set; }
void MyMethod()
{
string myMessage;
}
}
不應該我得到myMessage
警報?我沒有得到任何東西,當我建立這種效果。我如何激活此檢查?
我知道這種情況沒有警告。在MyMethod()
之內,您可以使用this.myMessage
消除本地屬性和類屬性之間的歧義。
只是FYI,屬性通常是TitleCased,而本地人是camelCased。使用該慣例可以防止像列出的那樣命名衝突。
我正在轉換一箇舊的ASP頁面,並試圖將其全球化。我實際上並不希望兩個版本的myMessage都可用。 – lincolnk 2010-08-25 14:52:38
結賬Lexical Scoping。 MyMethod中的myMessage在新的範圍中定義。在該方法中任何對myMessage的引用都將假定您引用了該範圍中定義的變量。您可以使用this.myMessage訪問在MyClass中定義的myMessage。
編輯: 鑑於這些信息,你可以看到爲什麼從編譯器的角度來看這是完全有效的。是否應該給你一個警告是有趣的。正如Mitch Wheat在他的評論中指出的那樣,像ReSharper這樣的工具會警告你這些事情,但如果一個編譯器應該警告你碰到某個與詞法範圍相關的事件時,這是值得商榷的。似乎更像是一種補充工具的工作。
我知道這是允許的,但感謝您提供一些很好的信息。 – lincolnk 2010-08-25 14:56:39
這實際上是按照私人領域的一個命名模式,雖然我更喜歡_fieldName自己:
public class MyClass
{
private string myMessage;
public MyClass(string myMessage)
{
this.myMessage = myMessage;
}
}
這裏的問題是,我們有沒有隱藏的一個有效的,需要的情況下,區分的方式一個意外的隱藏案例。我們嘗試爲以下情況保留警告:(1)代碼爲幾乎可以肯定錯誤;(2)有一種直接的方法來重寫代碼,以便在實際需要代碼的情況下消除警告。
這往往是因爲這個希望的情況下:
class Frog
{
private string name;
public Frog(string name)
{
this.name = name;
你不想改變字段「名」到別的東西,因爲它是完全描述性的原樣。您不希望將參數「name」更改爲其他名稱,因爲您希望能夠在C#4或Visual Basic中執行new Frog(name: "Kermit")
。由於需要隱藏並且代碼正確,我們不希望爲隱藏產生警告。
在正面,ReSharper警告這個... – 2010-08-25 14:45:13
@Mitch小麥謝謝我會檢查到這一點。 – lincolnk 2010-08-25 15:01:25