第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

“使用”指令應(yīng)該在名稱空間內(nèi)還是在名稱空間之外?

“使用”指令應(yīng)該在名稱空間內(nèi)還是在名稱空間之外?

忽然笑 2019-06-09 15:39:00
“使用”指令應(yīng)該在名稱空間內(nèi)還是在名稱空間之外?我一直在跑步StyleCop在一些C#代碼上,它不斷地報(bào)告說,我的using指令應(yīng)該在命名空間中。是否有技術(shù)原因?qū)sing在名稱空間內(nèi)而不是在名稱空間之外的指令?
查看完整描述

3 回答

?
溫溫醬

TA貢獻(xiàn)1752條經(jīng)驗(yàn) 獲得超4個(gè)贊

這個(gè)線程已經(jīng)有了一些很好的答案,但是我覺得我可以用這個(gè)額外的答案帶來更多的細(xì)節(jié)。

首先,請(qǐng)記住帶有句點(diǎn)的命名空間聲明,如:

namespace MyCorp.TheProduct.SomeModule.Utilities{
    ...}

完全等同于:

namespace MyCorp{
    namespace TheProduct
    {
        namespace SomeModule
        {
            namespace Utilities
            {
                ...
            }
        }
    }}

如果你想,你可以using所有這些級(jí)別的指令。(當(dāng)然,我們希望usingIt‘只在一個(gè)地方,但根據(jù)語言,這是合法的。)

解析隱含的類型的規(guī)則可以松散地表述如下:首先搜索內(nèi)部最“范圍”以進(jìn)行匹配,如果沒有發(fā)現(xiàn),則從一個(gè)級(jí)別到下一個(gè)范圍進(jìn)行搜索,以此類推。直到找到匹配為止。如果在某個(gè)級(jí)別找到多個(gè)匹配,如果其中一個(gè)類型來自當(dāng)前程序集,則選擇該類型并發(fā)出編譯器警告。否則,放棄(編譯時(shí)錯(cuò)誤)。

現(xiàn)在,讓我們?cè)趦蓚€(gè)主要約定的具體示例中明確說明這意味著什么。

(1)外部使用:

using System;using System.Collections.Generic;using System.Linq;//using MyCorp.TheProduct;  <-- uncommenting this would change nothingusing 
MyCorp.TheProduct.OtherModule;using MyCorp.TheProduct.OtherModule.Integration;using ThirdParty;namespace MyCorp.TheProduct.SomeModule
.Utilities{
    class C    {
        Ambiguous a;
    }}

在上述情況下,找出哪種類型Ambiguous是,搜索按以下順序進(jìn)行:

  1. 嵌套類型

    C

    (包括繼承的嵌套類型)
  2. 當(dāng)前命名空間中的類型

    MyCorp.TheProduct.SomeModule.Utilities

  3. 命名空間中的類型

    MyCorp.TheProduct.SomeModule

  4. 類型

    MyCorp.TheProduct

  5. 類型

    MyCorp

  6. 類中的類型。

    命名空間(全局命名空間)
  7. 類型

    SystemSystem.Collections.GenericSystem.LinqMyCorp.TheProduct.OtherModuleMyCorp.TheProduct.OtherModule.Integration

    ,和

    ThirdParty

另一項(xiàng)公約:

(2)內(nèi)部使用:

namespace MyCorp.TheProduct.SomeModule.Utilities{
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using MyCorp.TheProduct;                           // MyCorp can be left out; this using is NOT redundant
    using MyCorp.TheProduct.OtherModule;               // MyCorp.TheProduct can be left out
    using MyCorp.TheProduct.OtherModule.Integration;   // MyCorp.TheProduct can be left out
    using ThirdParty;

    class C    {
        Ambiguous a;
    }}

現(xiàn)在,搜索類型Ambiguous按以下順序排列:

  1. 嵌套類型

    C

    (包括繼承的嵌套類型)
  2. 當(dāng)前命名空間中的類型

    MyCorp.TheProduct.SomeModule.Utilities

  3. 類型

    SystemSystem.Collections.GenericSystem.LinqMyCorp.TheProductMyCorp.TheProduct.OtherModuleMyCorp.TheProduct.OtherModule.Integration

    ,和

    ThirdParty

  4. 命名空間中的類型

    MyCorp.TheProduct.SomeModule

  5. 類型

    MyCorp

  6. 類中的類型。

    命名空間(全局命名空間)

(請(qǐng)注意,MyCorp.TheProduct是“3”的一部分因此在“4”之間不需要。及“5.”)

結(jié)束語

無論您在名稱空間聲明中還是在名稱空間聲明之外,都有可能會(huì)有人稍后向具有較高優(yōu)先級(jí)的名稱空間中的一個(gè)添加具有相同名稱的新類型。

此外,如果嵌套命名空間的名稱與類型相同,則可能會(huì)導(dǎo)致問題。

將用戶從一個(gè)位置移動(dòng)到另一個(gè)位置總是很危險(xiǎn)的,因?yàn)樗阉鲗哟谓Y(jié)構(gòu)會(huì)發(fā)生變化,并且可能會(huì)找到另一種類型。因此,選擇一個(gè)慣例,并堅(jiān)持它,這樣你就不會(huì)再移動(dòng)使用。

默認(rèn)情況下,VisualStudio的模板將使用名稱空間(例如,如果使VS在新文件中生成一個(gè)新類)。

有用法的一個(gè)(微小的)優(yōu)勢(shì)然后,您可以為全局屬性使用指令,例如[assembly: ComVisible(false)]而不是[assembly: System.Runtime.InteropServices.ComVisible(false)].


查看完整回答
反對(duì) 回復(fù) 2019-06-09
  • 3 回答
  • 0 關(guān)注
  • 416 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)