簡體   English   中英

當聲明了using語句時,為什么有人會完全限定代碼中的Object?

[英]why would someone fully qualify an Object in code when there is a using statement declared?

我正在查看已聲明正確的using語句的代碼,但是由於聲明了using語句的事實,當代碼中的對象不需要時,它們是完全限定的。

是否有理由說明對象是完全合格的,但仍聲明了using語句?

也許在對象完全限定之后添加了using語句? 另一個不太可能的原因是名稱空間與使用中的對象存在沖突。

為什么有些人(例如我) 故意這樣做:

當使用相對少見的類時,它將提供有關該類的很多信息。 而且我喜歡在代碼中放入信息。 考慮:

System.Runtime.Serialization.Formatters.Soap.SoapFormatter formatter = 
     new SoapFormatter();  // .NET 2

要么

var formatter = new  // .NET 3
   System.Runtime.Serialization.Formatters.Soap.SoapFormatter.SoapFormatter();  

我完全意識到這種不一致,並且“何時使用”是任意的。 但是,對於閱讀此代碼的人來說,很多問題在出現之前都會得到回答。

Intellisense可以回答相同的問題,但並非總是可用。

有時,命名空間會發生沖突-多個命名空間中存在相同名稱的類,並且完全限定它們的作用即可將它們區分開。

可能是因為兩個導入的名稱空間中的名稱沖突。

例如, AA的類型稱為FooAAFoo ),而BB的類型稱為FooBBFoo )。 如果您這樣做:

using A.A;
using B.B;

// class definitions... etc
    var x = new Foo(); // which foo?

如果您不想完全符合條件,可以這樣做:

using A.A;
using B.B;
using AFoo = A.A.Foo;
using BFoo = B.B.Foo;

// class definitions... etc
    var x = new AFoo();

為什么不簡單地刪除using BB; 聲明? 好吧,假設您還使用了BBBarAAFooBarBBQuxAAQuux 您將要保留using語句。

原因很多。 一些可能是:

  1. 人們傾向於依靠Intellisense來查找所需的課程。
  2. 代碼已從其他位置粘貼。
  3. 壞習慣會變得很難。

一個很好的問題是Visual Studio中是否存在消除這種冗余的方法。 我不知道這種工具(可能類似於CodeRush),但也許有人會在這里發表評論。

當您使用一些內置的重構時,它們有時會完全限定對象。 這樣可以更安全地避免編譯器混亂。

我可以想到一些原因:

  1. 有多個using語句,它們嵌套或包含在同一行中,並且關於方法屬性屬於哪個對象存在一些歧義
  2. using塊特別長,語句本身可能不在屏幕上。 限定方法和屬性可以使其對其他程序員更具可讀性。
  3. 在項目中可能有一些非常初級的程序員,他們可能不太了解using語句,並且程序員可能正在嘗試使其對他們更具可讀性。

發生這種情況的原因之一:自動生成的代碼。 (例如Windows Forms設計器生成的代碼)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM