簡體   English   中英

從另一個 class c# 調用方法

[英]Call Methods from another class c#

在另一個類中調用方法時,我遇到了一個簡單的問題。
我在不同的 class 文件中有很多類似的代碼,我認為我可以使用我經常使用的方法創建一個全局 class。
但我不知道如何正確地做到這一點。
請檢查我下面的代碼並告訴我它可能是什么錯誤。
另外,請告訴我是否可以做不同的事情?
Form1僅包含一個按鈕。

namespace GlobalMethod
{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    public void ChangeTextInButton1(string newText)
    {
        button1.Text = newText;
    }
    private void Button1_Click(object sender, EventArgs e)
    {
        GlobalMethods gm = new GlobalMethods();
        gm.ChangeTextButtonFromOtherClass();
    }
}

public class GlobalMethods
{
    public void ChangeTextButtonFromOtherClass()
    {
        Form1 f1 = new Form1();
        f1.ChangeTextInButton1("NEW BUTTON NAME");
    }
}

}

當我調用這些方法時效果很好, string被傳遞給ChangeTextInButton1()button中的Text沒有改變,我不知道為什么。

您應該提供對現有表單的引用以對其進行修改,而不是創建表單。 為此,將依賴項注入到GlobalMethods的構造函數中:

class GlobalMethods
{
    private readonly Form1 form;
    public GlobalMethods(Form1 f) { this.form = f; }
}

現在您可以在ChangeTextButtonFromOtherClass方法中引用該表單:

public void ChangeTextButtonFromOtherClass()
{
    this.form.ChangeTextInButton1("NEW BUTTON NAME");
}

最后,您需要在 click-eventhandler 中提供該引用:

private void Button1_Click(object sender, EventArgs e)
{
    GlobalMethods gm = new GlobalMethods(this);
    gm.ChangeTextButtonFromOtherClass();
}

除了將引用傳遞給GloablMethods的構造函數之外,您還可以將其提供給ChangeTextButtonFromOtherClass -方法本身。

您正在 GlobalMethods 中創建 From1 的新實例。

因此,如果您期望調用 globalmethods 的 Form1 的現有實例會發生變化,那么這是不正確的。

如果你想“共享”這樣的代碼,那么 static 方法是一種方法。 所以你也不需要每次都新建一個 GlobalMethods 實例,然后傳入你要更新的 Form1 實例即可。

public static class GlobalMethods
{
    public static void ChangeTextButtonFromOtherClass(Form1 f1)
    {
        f1.ChangeTextInButton1("NEW BUTTON NAME");
    }
}

(我假設此 class 中沒有其他方法,並且您不需要為其他目的啟動它的實例)

話說回來。 如果真的只有 1 行代碼,就這么簡單,那么雖然你在技術上打破了“不要重復自己”的規則,但不值得擁有一個新的 class 來執行此操作。 只需重復同一行代碼。

話說回來!

如果你有多個 forms 做同樣的事情。 然后,您應該創建一個新的表單 class 來實現此功能,然后您的所有 forms 都可以從該新的父表單繼承。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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