0
A
回答
1
因爲C#規範規定:
擴展方法Ci.Mj可享有如果:
·次是一個非通用的非嵌套類
·Mj的名稱是標識符
·Mj適用於 參數作爲上面顯示的靜態方法
·隱式標識,引用或裝箱轉換存在 從expr到第一個參數Mj的類型。
就C#規範而言,用戶定義的轉換運算符不同於隱式引用轉換,並且肯定不同於身份或裝箱轉換。
對於暗示爲什麼:
public static class Extensions
{
public static void DoSomething(this Bar b)
{
Console.Out.WriteLine("Some bar");
}
public static void DoSomething(this Boo b)
{
Console.Out.WriteLine("Some boo");
}
}
public class Foo
{
public static implicit operator Bar(Foo f)
{
return new Bar();
}
public static implicit operator Boo(Foo f)
{
return new Boo();
}
}
public class Bar { }
public class Boo { }
public class Application
{
private Foo f;
public void DoWork()
{
// What would you expect to happen here?
f.DoSomething();
// Incidentally, this doesn't compile either:
Extensions.DoSomething(f);
}
}
C#不能明確地選擇執行其隱式轉換。
相關問題
- 1. 爲什麼我們要聲明一個靜態方法
- 2. 爲什麼Stream.CopyTo不是擴展方法?
- 3. C#擴展方法,而不是迭代
- 4. 爲什麼使用單例而不是靜態方法?
- 5. 什麼時候應該將HTML助手作爲擴展方法而不是簡單的靜態方法編寫?
- 6. 什麼是擴展方法,爲什麼我們需要使用它?
- 7. 爲什麼getAppProperty()不是靜態方法?
- 8. 爲什麼在這個例子中需要一個方法而不是變量?
- 9. 爲什麼我無法爲靜態類創建擴展方法?
- 10. 爲什麼CustomFieldSerializer需要靜態方法?
- 11. 爲什麼我們不需要爲靜態方法創建對象?
- 12. 什麼是擴展方法?
- 13. VB擴展屬性,而不是擴展方法
- 14. 爲什麼擴展方法調用不明確?
- 15. 爲什麼我們需要Buffer.isBuffer方法?
- 16. 爲什麼我們需要addRequestHeader方法?
- 17. 爲什麼TimeSpan.Duration()是一種方法而不是屬性?
- 18. 爲什麼我們需要抽象類而不是虛擬類?
- 19. java.lang.NoClassDefFoundError拋出靜態方法而不是靜態成員
- 20. Java:爲什麼要使用方法而不是構造函數?
- 21. 爲什麼要使用Create方法而不是使用「new」?
- 22. 擴展PDO類:爲什麼該方法返回0而不是錯誤消息?
- 23. 一個靜態方法總是可以轉換爲一個實例方法嗎?
- 24. 什麼是聲明靜態可變值的正確方法
- 25. 爲什麼Camera需要在onPause()而不是onstop()方法的Activity中釋放?
- 26. 擴展方法問題。爲什麼我需要使用someObj = someObj.somemethod();
- 27. 在非靜態類中聲明一個靜態方法的意義是什麼?
- 28. 爲什麼要使用擴展方法?
- 29. 哪個Scala方法返回null而不是Option,爲什麼?
- 30. 非靜態類中靜態方法的要點是什麼?