簡體   English   中英

從另一個類調用方法

[英]Call a method from another class

我想知道如何從另一個類調用方法而不必創建該類的新實例。 我已經看過了這個,我看到的90%的例子都要求我制作我引用的類的新副本。

像這樣的東西:

Fooclass test = new Fooclass();
test.CallMethod();

但是,我想知道是否有一種方法可以在不創建新類實例的情況下調用該方法。 現在我已經在團結中嘗試了以下內容。

public ImageLoader image; 
void Start () 
{
    image = gameObject.GetComponent<ImageLoader>() as ImageLoader;
}

void OnClick()
{
    image.MoveForward();
}

但是,當我運行這個時,我收到以下錯誤:

NullReferenceException:未將對象引用設置為對象的實例

我知道這將通過制作我的圖像加載器類的新實例來解決,但我不能這樣做,因為它持有大量數據我不想多次重復。

是的你可以。 第一種方法是讓你的班級變得靜止。

public static class Fooclass
{
    // I don't know the return type of your CallMethod, so I used the void one.
    public static void CallMethod()
    {

    }
}

這樣,無論何時對您的代碼,您都可以調用CallMethod() ,如下所示:

Fooclass.CallMethod()

另一個應用是在當前類中定義靜態方法,而不需要類是靜態的,如下所示:

public class Fooclass
{
    // I don't know the return type of your CallMethod, so I used the void one.
    public static void CallMethod()
    {

    }
}

現在,由於Fooclass所有實例Fooclass將共享名為CallMethod的相同方法,因此您可以像下面這樣調用它:

Fooclass.CallMethod()

盡管現在Fooclass現在不是一個靜態類,但不需要再次實例化Fooclass類型的對象!

有關進一步的文檔,請查看靜態類和靜態成員鏈接。

創建一個靜態類/靜態方法。 如果您不希望您的類是靜態的,那么使該方法靜態就足夠了。

class my_Class
{
    public static void Print()
    {
        Console.WriteLine("Hello World");
    }
}

my_Class.Print();

如果您的其他類的方法沒有使用任何實例級別變量,那么您可以將其設置為靜態並使用它

Fooclass.CallMethod();

標記的答案適合您的問題,但請注意您的原始問題似乎有所不同。

我想知道導致你的NullReferenceException: Object reference not set to an instance of an object錯誤NullReferenceException: Object reference not set to an instance of an object的原始問題是你的方法名為OnClick()是在你的Start()方法之前調用還是調用image = gameObject.GetComponent<ImageLoader>() as ImageLoader; 永遠不會返回所需類的有效實例,因此image始終為null。

您需要在靜態/非靜態class聲明static成員。 即使沒有創建類的實例, static成員也可以在class上調用。

例如:

public class Automobile
{
    public static int NumberOfWheels = 4;
    public static int SizeOfGasTank
    {
        get
        {
            return 15;
        }
    }
    public static void Drive() { }
    public static event EventType RunOutOfGas;

    // Other non-static fields and properties...
}

Static成員在第一次訪問static成員之前和static構造函數(如果有的話)被調用之前被初始化。 要訪問靜態類成員,請使用類的名稱而不是變量名來指定成員的位置,如以下示例所示:

Automobile.Drive();
int i = Automobile.NumberOfWheels;

static成員始終由class名訪問,而不是實例名。 無論創建了多少個類實例,都只存在一個static成員的副本。 Static方法和屬性無法訪問其包含類型中的非靜態字段和事件,並且除非在方法參數中顯式傳遞,否則它們無法訪問任何對象的實例變量。

來源: http//msdn.microsoft.com/en-us/library/79b3xss3.aspx

希望這對你有所幫助。

Shishir

暫無
暫無

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

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