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