C# 有没有一种方法可以使继承列表中的类的名称具有字符串默认值
不太清楚这个词怎么说,但我有几个类,如下所示C# 有没有一种方法可以使继承列表中的类的名称具有字符串默认值,c#,C#,不太清楚这个词怎么说,但我有几个类,如下所示 public class Item { string itemPath; string prefabID; void Initialize() { itemPath = classnames + prefabID; } } public class Equippable : Item public class Weapon : Equippable public class MeleeWe
public class Item
{
string itemPath;
string prefabID;
void Initialize()
{
itemPath = classnames + prefabID;
}
}
public class Equippable : Item
public class Weapon : Equippable
public class MeleeWeapon : Weapon
我希望每个字符串以自己的类名结尾,以基类名称开头,并且在每个名称之间有一个“/”
只是希望这样做作为一种存储每个项目的方式预制路径
因此,希望Equipable将其字符串作为
项目/装备/预制ID
武器是
项目/装备/武器/预制ID
对于每个派生类,依此类推
有什么建议或解决方法吗?试试这个:
void Initialize()
{
var segs = new List<string>();
var type = GetType();
while (type != null && type != typeof(object))
{
segs.Insert(0, type.Name);
type = type.BaseType;
}
segs.Add(prefabID);
itemPath = string.Join("/", segs);
}
void Initialize()
{
var segs=新列表();
var type=GetType();
while(type!=null&&type!=typeof(对象))
{
segs.Insert(0,type.Name);
type=type.BaseType;
}
segs.Add(预置ID);
itemPath=string.Join(“/”,segs);
}
试试这个:
void Initialize()
{
var segs = new List<string>();
var type = GetType();
while (type != null && type != typeof(object))
{
segs.Insert(0, type.Name);
type = type.BaseType;
}
segs.Add(prefabID);
itemPath = string.Join("/", segs);
}
void Initialize()
{
var segs=新列表();
var type=GetType();
while(type!=null&&type!=typeof(对象))
{
segs.Insert(0,type.Name);
type=type.BaseType;
}
segs.Add(预置ID);
itemPath=string.Join(“/”,segs);
}
您可以递归地遍历所有基类型,并将此路径构建到itemPath中
下面是实现,下面是输出
我认为字段prefableID稍后将由您填充,因此无论何时调用getPrefableID(),它都将返回itemPath+prefableID
public class Item
{
string itemPath;
string prefabID;
public string GetPrefabID()
{
return itemPath + "/" + prefabID;
}
public Item()
{
Initialize();
}
void Initialize()
{
itemPath = GetPrefabPath() + prefabID;
prefabID = Guid.NewGuid().ToString();
}
string GetPrefabPath()
{
StringBuilder prefabricatedPath = new StringBuilder(GetType().Name);
Type baseType = GetType().BaseType;
while (baseType != typeof(object))
{
prefabricatedPath.Insert(0, baseType.Name + "/");
baseType = baseType.BaseType;
}
return prefabricatedPath.ToString();
}
}
public class Equippable : Item { };
public class Weapon : Equippable { };
public class MeleeWeapon : Weapon { };
static void Main(string[] args)
{
Console.WriteLine("prefabID for Item: {0}", new Item().GetPrefabID());
Console.WriteLine("prefabID for Equippable: {0}", new Equippable().GetPrefabID());
Console.WriteLine("prefabID for Weapon: {0}", new Weapon().GetPrefabID());
Console.WriteLine("prefabID for MeleeWeapon: {0}", new MeleeWeapon().GetPrefabID());
Console.ReadLine();
}
输出:
prefabID for Item: Item/c4fb4f63-f7f1-4c83-9d01-26881bb5e014
prefabID for Equippable: Item/Equippable/858791ea-d10d-4560-b8e4-202d91625088
prefabID for Weapon: Item/Equippable/Weapon/0bcba546-df85-4fed-ab68-5a1e012df5d
prefabID for MeleeWeapon: Item/Equippable/Weapon/MeleeWeapon/75e60a6d-854a-4d07
b20b-a709699bb3d7
您可以递归地遍历所有基类型,并将此路径构建到itemPath中 下面是实现,下面是输出 我认为字段prefableID稍后将由您填充,因此无论何时调用getPrefableID(),它都将返回itemPath+prefableID
public class Item
{
string itemPath;
string prefabID;
public string GetPrefabID()
{
return itemPath + "/" + prefabID;
}
public Item()
{
Initialize();
}
void Initialize()
{
itemPath = GetPrefabPath() + prefabID;
prefabID = Guid.NewGuid().ToString();
}
string GetPrefabPath()
{
StringBuilder prefabricatedPath = new StringBuilder(GetType().Name);
Type baseType = GetType().BaseType;
while (baseType != typeof(object))
{
prefabricatedPath.Insert(0, baseType.Name + "/");
baseType = baseType.BaseType;
}
return prefabricatedPath.ToString();
}
}
public class Equippable : Item { };
public class Weapon : Equippable { };
public class MeleeWeapon : Weapon { };
static void Main(string[] args)
{
Console.WriteLine("prefabID for Item: {0}", new Item().GetPrefabID());
Console.WriteLine("prefabID for Equippable: {0}", new Equippable().GetPrefabID());
Console.WriteLine("prefabID for Weapon: {0}", new Weapon().GetPrefabID());
Console.WriteLine("prefabID for MeleeWeapon: {0}", new MeleeWeapon().GetPrefabID());
Console.ReadLine();
}
输出:
prefabID for Item: Item/c4fb4f63-f7f1-4c83-9d01-26881bb5e014
prefabID for Equippable: Item/Equippable/858791ea-d10d-4560-b8e4-202d91625088
prefabID for Weapon: Item/Equippable/Weapon/0bcba546-df85-4fed-ab68-5a1e012df5d
prefabID for MeleeWeapon: Item/Equippable/Weapon/MeleeWeapon/75e60a6d-854a-4d07
b20b-a709699bb3d7
哦太晚了。噢。。太晚了。英雄联盟