我知道在使用自动属性时,编译器会在屏幕后面创建自己的支持字段.但是,在我读过的许多程序中,我看到人们明确地写了
private int _backingField;
public int Property { get { return _backingField; } }
Run Code Online (Sandbox Code Playgroud)
上面和下面有什么区别?
public int Property { get; private set; }
Run Code Online (Sandbox Code Playgroud)
我明白当你在getter或setter中实际存在副作用时使用该属性是显而易见的,但通常情况并非如此.此外,我知道您必须在结构的情况下明确使用支持字段,您不能通过属性访问其成员.
我能找到的唯一区别是调用值的方式在它定义的类中是不同的.那么它是简单的首选项,还是通过其属性调用值或直接访问领域?简单约定?
我有以下代码:
public class Character
{
public Vector2 WorldPixelPosition
{
get { return Movement.Position; }
}
public Vector2 WorldPosition
{
get { return new Vector2(Movement.Position.X / Tile.Width, Movement.Position.Y / Tile.Height); }
}
public Vector2 LevelPosition
{
get { return new Vector2(WorldPosition.X % Level.Width, WorldPosition.Y % Level.Height); }
}
}
Run Code Online (Sandbox Code Playgroud)
现在在我的代码中的其他地方,我在循环中对Character.LevelPosition进行了大约2500次调用.这意味着每个更新周期,5000'新'Vector2正在制作,而在我的笔记本电脑上,它确实降低了帧速率.
我通过创建暂时修复了它
var levelPosition = Character.LevelPosition;
Run Code Online (Sandbox Code Playgroud)
在我启动循环之前,但是每次遇到类似的情况时,我都会感觉到它的丑陋代码.也许它是 - 要走的路,但我想确定一下.
有没有更好或普遍接受的方式来做到这一点?
我正在使用XNA-Framework,它使用Vector2的是.
学习使用Parsec库,作业的一部分.
编辑:欢迎使用其他库的建议,重点是解析.
我想要的是用大写字母提取所有单词,从任何句子中提取四个罗盘方向.例如:"比利时完全位于荷兰南部." 应找到并返回"比利时南荷兰".
我无法想象的是如何忽略(吃)任何不是指南针方向的输入.我正在寻找一些类似的东西
'many (not compassDirection >> space)'
Run Code Online (Sandbox Code Playgroud)
但g(h)oogle并没有帮助我.
以下代码显然停留在'many'函数上.
readExpr :: String -> String
readExpr input = case parse (parseLine) "" input of
Left err -> "No match: " ++ show err
Right val -> "Found: " ++ showVal val
parseLine :: Parser GraphValue
parseLine = do
x <- parseCountry
space
many ( some (noneOf " ") >> space )
y <- parseCompass
space
many ( some (noneOf " ") >> space )
z <- parseCountry …Run Code Online (Sandbox Code Playgroud) 我正在写一个简单的回合制RPG系统.我有一个BattleScreen类来处理绘图...屏幕.事情是,它必须知道关于我Player班级的几乎所有事情.它Name,HP值,MP值,JobName,Level,Experience,Moneyetc.etc.etc.为了把它写在屏幕上.我的Draw()方法最终会从中抽取几乎所有变量Player,并且它要求我在Player公共场合制作几乎所有的东西
这让我相信让这个Player类自己画出来更好一点,但最后我得到了需要调用的多个Draw()方法BattleScreen.如果Player是主要播放器(具有所有数据和名称)的情况下的绘制方法,以及它在场边(只有精灵和HP/MP可见)的一个绘制方法,以及其他屏幕的其他方法.
两种方式都感觉很蠢.
这两种方式中的任何一种都被认为是"正常"吗?有没有更好的方法来设计它?