簡體   English   中英

如何向MessageBox添加擴展方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM