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

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

帶有字符串參數(shù)的構(gòu)造函數(shù)和帶有對象參數(shù)的相同重載

帶有字符串參數(shù)的構(gòu)造函數(shù)和帶有對象參數(shù)的相同重載

C#
翻翻過去那場雪 2021-10-24 19:16:09
我的類目前有兩個構(gòu)造函數(shù),它們是重載:public CustomRangeValidationAttribute(string value) {}和public CustomRangeValidationAttribute(object value) {}這似乎工作正常:當(dāng)我使用string第一個構(gòu)造函數(shù)調(diào)用該方法時,當(dāng)我使用不同的值時,例如 an integeror boolean,第二個構(gòu)造函數(shù)被調(diào)用。我假設(shè)有一個規(guī)則可以強(qiáng)制特定類型匹配到更特定的重載中,從而防止var c = new CustomRangeValidationAttrubute("test");從調(diào)用對象重載。這是“安全代碼”,還是應(yīng)該(或可以)改進(jìn)代碼?我有一種嘮叨的感覺,這不是最佳做法。
查看完整描述

3 回答

?
largeQ

TA貢獻(xiàn)2039條經(jīng)驗 獲得超8個贊

一旦有更多派生類型簽名的重載,編譯器將始終選擇您提供的最具體類型。

話雖如此,除非有人這樣做,否則new CustomRangeValidationAttrubute((object)"test")如果您將字符串傳遞給CustomRangeValidationAttrubute始終帶有stringin 參數(shù)的構(gòu)造函數(shù),則將被選擇。

關(guān)于這是否是不好的做法,如果我沒有看到您的特定用例,我無法確定,請記住您傳遞給的每個值類型都new CustomRangeValidationAttrubute(object)將被裝箱,這很糟糕,因為它給 GC 和更何況你會失去類型安全。


查看完整回答
反對 回復(fù) 2021-10-24
?
紅顏莎娜

TA貢獻(xiàn)1842條經(jīng)驗 獲得超13個贊

您有兩個重載,它們僅在引用類型上有所不同,并且引用類型之間存在層次關(guān)系,因此一個可以轉(zhuǎn)換為另一個。

在這種情況下,您真的應(yīng)該確保在選擇更廣泛的重載時代碼在邏輯上的行為相同,但引用結(jié)果是更派生的類型1,2。是你集中注意力的地方。當(dāng)然,如果您能堅持這條規(guī)則,通常會發(fā)現(xiàn)派生程度更高的重載不是必需的,而只是更廣泛的方法中進(jìn)行特殊處理。


1特別是因為,正如 vc74 在評論中指出的,重載決議(通常,忽略dynamic)是在編譯時基于編譯時類型3 完成的。

2這符合重載的相同廣泛原則。不要重載,選擇哪一個會導(dǎo)致邏輯上不同的結(jié)果。如果你表現(xiàn)出不同的行為,不要給它們同一個名字(對于構(gòu)造函數(shù),這可能意味著分成兩個單獨(dú)的類,可能有一個共享的基類,如果這是你打算做的)

3我很欣賞這是一個屬性,所以你期望只有編譯時間是相關(guān)的,但我仍然會在可能的情況下在這里聽取一般原則。


查看完整回答
反對 回復(fù) 2021-10-24
?
叮當(dāng)貓咪

TA貢獻(xiàn)1776條經(jīng)驗 獲得超12個贊

我解決此代碼的方法是將重載移動到具有單獨(dú)方法而不是原始構(gòu)造函數(shù)的新抽象類:


public CustomRangeValidationStringAttribute(string value) {}


public CustomRangeValidationGenericAttribute(object value) {}

在從這個新基類繼承的兩個類中,每個類都使用自己的方法,創(chuàng)建兩個不同的屬性以供選擇,[CustomRangeValidationString] 和 [CustomRangeValidationGeneric]。


查看完整回答
反對 回復(fù) 2021-10-24
  • 3 回答
  • 0 關(guān)注
  • 232 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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