缺點目前執行的:爲什麼呼叫者信息屬性以他們的方式實現?
- 他們違反了DRY原則,你必須處處參數重寫你需要他們
- 他們毀實現隱藏,你必須指定這些參數已經在接口 - 即使只有你的接口實現的單一一個需要他們
- 他們弄髒界面,用戶看到他們在自動完成,文檔等頁。
爲什麼語言d esigners決定了一些更有用的東西,比如:
public void Foo()
{
Console.WriteLine(CallerInformation.File);
}
我猜這個實現缺少一些特性:如果Foo()是一個實現IFoo的類,並且IFoo在另一個程序集中,那麼IFoo的調用者在編譯時應該如何知道這些信息是必需的 - 他不知道這一點。
但是!記住這隻能在一個「構建步驟」內工作,而不是像目前的實現那樣產生一些不可用的東西,這不是更好嗎?
Q1:是否有官方文件說明爲什麼它現在以這種方式實施?
Q2:有人知道其他語言的更好的解決方案嗎?
「CallerInformation.File」究竟如何工作?您是否會在執行時爲每個*調用填充它?你將如何通過多種方法傳播它?目前的實現基本上沒有*執行時間成本。如果你打算提出一個替代方案,你需要更清楚地瞭解它的實際工作方式。 –
由於某些屬性,當前呼叫者知道「他的職責」。爲什麼不至少使用方法級屬性而不是參數級屬性來防止界面污染? (我知道它並沒有消除我所有的缺點) –
它爲參數*提供了一個值*。方法級別屬性是否必須命名它所應用的參數?聽起來有點icky。雖然我可以看到你提到的缺點,但我認爲你迄今還沒有提出任何更好的建議。 –