And*_*dré 1 c# class instances
这看起来真的很混乱,但我想创建一个填充了不同类作为值的字典,然后使用字母作为键.当我在该词典中调用一个键时,我需要它来表现我正在键入"new ClassInDictionary".
这样我就可以创建一个文本文件,其中包含定义不同块的不同符号.
为了帮助清理这里我的当前代码:
blockIdentifier.Add("=", new BlockAir()); // Define which class corresponds to which letter
blockIdentifier.Add("-", new BlockDirt());
for (int mapX = 0; mapX < mapWidth; mapX++)
{
for (int mapY = 0; mapY < mapHeight; mapY++)
{
try
{
Block block = blockIdentifier[mapSplit[mapY].Substring(mapX, 1)]; // Simply find which letter to use, let's pretend it's: "="
// The line above should be creating a new instance of the class BlockAir
block.blockX = mapX * 45;
block.blockY = mapY * 45;
mapList[mapY, mapX] = block;
}
catch (Exception)
{
}
}
}
Run Code Online (Sandbox Code Playgroud)
变量blockIdentifier:
public static Dictionary<string, Block> blockIdentifier = new Dictionary<string, Block>();
Run Code Online (Sandbox Code Playgroud)
和BlockDirt:
public class BlockDirt : Block
{
public int hi;
public BlockDirt()
: base("Dirt Block.png", 0, 0, true)
{
}
}
Run Code Online (Sandbox Code Playgroud)
我只需要调用blockIdentifier ["="]并获取类BlockDirt()的新实例,我该怎么做?
您是想每次创建块的新实例还是重新使用块的单个实例?
从代码看起来好像每次都要创建一个新代码.如果是这样,一种方法是使Dictionary<string, Func<Block>>所有块继承自Block(或IBlock,这可能会更好).
注意
假设BlockAir : IBlock和BlockDirt : IBlock
var blockLookup = new Dictionary<string, Func<IBlock>>();
blockLookup.Add("=", ()=> new BlockAir());
blockLookup.Add("-", ()=> new BlockDirt());
...
mapList[x,y] = blockLookup[symbol]();
...
Run Code Online (Sandbox Code Playgroud)
或者沿着那些方向(我现在还没有访问开发环境,所以对任何错误道歉)