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. 使用的,而不是擴展方法
- 3. 爲什麼Stream.CopyTo不是擴展方法?
- 4. 爲什麼使用單例而不是靜態方法?
- 5. C#擴展方法,而不是迭代
- 6. 什麼是擴展方法,爲什麼我們需要使用它?
- 7. 什麼時候應該將HTML助手作爲擴展方法而不是簡單的靜態方法編寫?
- 8. 爲什麼java 8使用默認方法而不是擴展方法
- 9. 爲什麼getAppProperty()不是靜態方法?
- 10. 爲什麼不是每種方法都是靜態方法?
- 11. 爲什麼說方法不是靜態時它是靜態的?
- 12. 爲什麼在這個例子中需要一個方法而不是變量?
- 13. 爲什麼主要方法需要是靜態的?
- 14. 爲什麼我無法爲靜態類創建擴展方法?
- 15. 爲什麼CustomFieldSerializer需要靜態方法?
- 16. 當我們需要Arraylist中的Collections類方法時,爲什麼不擴展Collections?
- 17. 爲什麼我們不需要爲靜態方法創建對象?
- 18. 如何調用基類方法而不是擴展類方法
- 19. 什麼是擴展方法?
- 20. 爲什麼我們需要鍵入 '( 「+ I +」)',而不僅僅是 '(我)'
- 21. 爲什麼調用這個方法而不是另一個?
- 22. VB擴展屬性,而不是擴展方法
- 23. 爲什麼要擴展一個類而不是僅僅向原始類添加一個新方法?
- 24. 爲什麼toString()不能是一個靜態方法?
- 25. 爲什麼我的Class方法調用在一個方法中工作,而不是另一個方法?
- 26. 爲什麼核心動畫方法是類方法而不是實例方法?
- 27. 爲什麼我需要使用document.write而不是DOM操作方法?
- 28. 爲什麼我們需要addRequestHeader方法?
- 29. 爲什麼我們需要ContinueWith方法?
- 30. 爲什麼我們需要Buffer.isBuffer方法?