3 回答

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超10個(gè)贊
當(dāng)我發(fā)現(xiàn)它時(shí),這個(gè)非常不明顯,特別是考慮到界面相同情況的不同。這根本不是休息,但令人驚訝的是我決定將它包括在內(nèi):
將類(lèi)成員重構(gòu)為基類(lèi)
善良:不休息!
受影響的語(yǔ)言:無(wú)(即沒(méi)有破壞)
更改前的API:
class Foo{ public virtual void Bar() {} public virtual void Baz() {}}
更改后的API:
class FooBase{ public virtual void Bar() {}}class Foo : FooBase{ public virtual void Baz() {}}
在整個(gè)更改過(guò)程中保持工作的示例代碼(即使我預(yù)計(jì)它會(huì)中斷):
// C++/CLIref class Derived : Foo{ public virtual void Baz() {{ // Explicit override public virtual void BarOverride() = Foo::Bar {}};
筆記:
C ++ / CLI是唯一具有類(lèi)似于虛擬基類(lèi)成員的顯式接口實(shí)現(xiàn)的構(gòu)造的.NET語(yǔ)言 - “顯式覆蓋”。我完全期望導(dǎo)致與將接口成員移動(dòng)到基接口時(shí)相同的破壞(因?yàn)闉轱@式覆蓋生成的IL與顯式實(shí)現(xiàn)相同)。令我驚訝的是,事實(shí)并非如此 - 即使生成的IL仍然指定BarOverride
覆蓋Foo::Bar
而不是FooBase::Bar
,匯編加載器足夠智能,可以正確地替換另一個(gè)而沒(méi)有任何抱怨 - 顯然,這Foo
是一個(gè)類(lèi)的事實(shí)是產(chǎn)生差異的原因。去搞清楚...
- 3 回答
- 0 關(guān)注
- 677 瀏覽
添加回答
舉報(bào)