我正在用 Unity (C#) 撰寫一個小游戲。我有兩個類,例如個人和公司。我有第三類“物件”,它代表任何型別的東西。
Obejcts 類的實體必須包含一個變數“所有者”,可以是個人或公司。在運行時,所有者必須在公司和個人資料型別之間進行更改。由于游戲概念,我不能僅僅假設物件的擁有者是所有者。
以下是示例代碼:
public class Person {
public List<Objects> inventory = new List<Objects>();
...
}
public class Company {
public List<Objects> inventory = new List<Objects>();
...
}
public class Objects {
public Person, Company owner; // just exemplary two possible data types
...
}
我從 Python 中“翻譯”代碼,所以這個程序以前不是問題,但現在是。
簡而言之,我不想以任何方式更改我的資料,我只想在運行時更改變數本身的資料型別(我認為稱為文字)。或者“禁用”對該變數的型別檢查。
我的“作業”解決方案是為個人和公司實作兩個所有者變數,但它很容易出錯,我必須撰寫更多代碼來完成相同的功能。
資料型別 var 對我不起作用,因為所有者變數必須是公共的。資料型別物件也不起作用,因為我不能呼叫類物件的方法。
我讀過關于反射和介面的文章,但我不認為那是我需要的。
動態本來是可能的,但必須多次更改資料型別,例如人員 -> 公司 -> 人員。
uj5u.com熱心網友回復:
要么使用interface
public interface IOwner
{
public List<Objects> inventory { get; }
}
public class Person : IOwner
{
public List<Objects> inventory { get; private set; } = new ();
...
}
public class Company : IOwner
{
public List<Objects> inventory { get; private set; } = new ();
...
}
public class Objects
{
public IOwner Owner;
}
或通用基類
public abstract class Owner
{
// shared implementations
public List<Objects> inventory = new();
}
public class Person : Owner
{
...
}
public class Company : Owner
{
...
}
public class Objects
{
public Owner Owner;
}
或者,您可以使用所有型別的母親object(= System.Object)
public class Objects
{
public object Owner;
}
或者dynamic
public class Objects
{
public dynamic Owner;
}
取決于您是真的只想存盤參考還是實際使用/通過它做某事
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/523516.html
標籤:C#unity3d类型
