簡體   English   中英

是否可以創建var類?

[英]Is it possible to make a var class?

我正在開發具有多個類的多人游戲。 運行服務器的腳本需要在這些不同的類上引用腳本,而在玩家選擇之前不知道玩家是哪個類。 我想嘗試將腳本引用為var。

例如

var script; 

if (class == class1)
{
    script = class1Script; 
}
else if (class == class2)
{
    script = class2Script;
}

script.function(); 

但是var只是方法。 我當前的解決方法是在一個腳本中具有不同的類函數,並為這些類賦予編號。 所以

start()
{
    int classNumber;
    if (class1)
    {
        class = 1; 
    } 
    else if (class2)
    {
        class = 2;
    }
}

update()
{
    switch(classNumber)
        case(1): function1 
        case(2): function2 
}

可以,但是效率很低,尤其是對於很多類而言。

聽起來好像接口適合您的情況。

您應該為類定義要實現的接口,例如:

public interface IPlayer {
   void Update();
}
public class PlayerType1 : IPlayer { }
public class PlayerType2 : IPlayer { }

該接口將定義您的類承諾實現的協定,因此您可以安全地調用它公開的方法,而無需了解(或關心)底層類的實際含義:

IPlayer player; 

if (condition) {
    player = new PlayerType1();
} else {
    player = new PlayerType2();
}

player.Update();

調用fuction您的實例假定這樣一個方法。 因此,如果您的條件都不匹配,則由於fuction不存在,您將得到一個錯誤。 確保這一點的最佳方法是創建所有類都必須實現的通用接口:

IMyInterface script; 

if (condition1)
{
    script = new Class1Script(); 
}
else if (condition2)
{
    script = new Class2Script();
}

script.DoSomething(); 

有:

interface IMyInterface
{
    void DoSomething();
}

和:

class Class1Script : IMyInterface { ...}
class Class2Script : IMyInterface { ...}

如果您在所有實際繼承類之間都具有一些通用邏輯,則也可以使用通用抽象基類。

暫無
暫無

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

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