[英]How to add an extension method to the MessageBox
這是可能的?
基於另一個例子,如LabelExtesios,StringExtensions等我寫了這樣的:
namespace MessageBoxExtensions
{
public static class MessageBoxExtensionsClass
{
public static void Foo()
{
}
}
}
然后:
using MessageBoxExtensions;
// ...
MessageBox.Foo();
gin錯誤:MessageBox.Foo();
'System.Windows.Forms.MessageBox' does not contain a definition for 'Foo'
你不能這樣做,因為System.Windows.Forms.MessageBox
不是 MessageBox
一個實例。 MessageBox.Show()
是一個靜態方法。
您無法創建MessageBox
的實例,因為此類沒有公共構造函數。
但是您可以在System.Windows.Forms
命名空間中創建自己的類,並在此方法中使用MessageBox
namespace System.Windows.Forms
{
public static class MyCustomMessageBox
{
public static void Foo()
{
MessageBox.Show("MyText");
}
}
}
MyCustomMessageBox.Foo();
您在擴展方法聲明中缺少this關鍵字 。
但是因為System.Windows.Forms.MessageBox
沒有公共構造函數只是靜態工廠方法(返回DialogResult
)所以你不能創建一個獨立的MessageBox
實例來調用你的擴展方法。
那么回答你的問題:
是的,可以在MessageBox
上創建一個擴展方法(參見其他答案),但是你不能通過MessageBox.Foo()
調用它,你需要一個MessageBox
實例,你不能創建它,所以它不起作用。
您需要向擴展方法添加MessageBox
類型的參數:
public static void Foo(this MessageBox messageBox) { ... }
然后在調用方法之前創建MessageBox的實例
var messageBox = new MessageBox();
messageBox.Foo();
[更新:不幸的是,這在MessageBox
情況下不起作用,因為沒有公共構造函數。 感謝nemesv提示。 以下示例在理論上應該起作用,但在實踐中它不會起作用。 我會留待它參考。]
在您的示例中,您可以在類本身上調用該方法。 擴展方法僅適用於實例。 以下是適用上述更正的代碼版本:
namespace MessageBoxExtensions
{
public static class MessageBoxExtensionsClass
{
public static void Foo(this MessageBox messageBox)
{
// ...
}
}
}
using MessageBoxExtensions;
// ...
var messageBox = new MessageBox();
messageBox.Foo();
您必須使用this
修飾符限定擴展方法參數,才能將其注冊為擴展方法。
namespace MessageBoxExtensions
{
public static class MessageBoxExtensionsClass
{
public static void Foo(this MessageBox messagebox)
{
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.