感谢每个人的答案找到解决方案。检查这篇文章的底部。
我正在使用MVC,问题与我的模型有关。用我的代码我创建了一个板,然后创建了瓷砖。板上的每个瓦片都获得X和Y值。在此之后,我想阻止访问setter,以防止我再次无意中更改值。
我在考虑使用常量而不是变量,但似乎我必须在创建时定义值。换句话说:const myConst:uint; myConst = 2; //不起作用
现在我有一个我不满意的解决方法。当然有一种更清洁的方式。你可以在下面看到我的解决方法。
package myboardgame
{
internal class Tile
{
private var _x:uint;
private var _y:uint;
private var _xLock:Boolean; // Makes sure that the X and Y values of a tile can only be set once to prevent errors
private var _yLock:Boolean; // " "
internal function set x(x:uint):void
{ if(!_xLock) {_x = x; _xLock = true;} else { throw new Error("Trying to change the one-time write access X tile value")}}
internal function get x():uint
{ return _x; }
}
}
编辑。我采用的解决方案:
package myboardgame
{
internal class Tile
{
private var _x:uint;
private var _y:uint;
public function Tile(x:uint, y:uint):void
{
_x = x;
_y = y;
}
internal function get x():uint
{ return _x; }
internal function get y():uint
{ return _y; }
}
}
答案 0 :(得分:4)
如果要在创建时设置值,则必须为类定义显式构造函数(即使不需要也始终建议)。
您定义的构造函数必须基本上有一个参数,您可以通过该参数为inner属性提供值。这只在实例初始化时完成一次。
public class Tile {
//these are the attributes: your instance status
private var x:int;
private var y:int;
//this is the class constructor
public function Tile(_x:int, _y:int){
//here goes the initialization of your attributes and other stuff you may need
x = _x;
y = _y;
}
//then the other methods...
}
答案 1 :(得分:0)
假设你的变量永远不会像uint那样大.MAX_VALUE:
package{
public class MyClass{
private var _x:uint = uint.MAX_VALUE;
public function set x(x:uint){
if (x != MAX_VALUE)
//error
_x = x;
}
}
}
答案 2 :(得分:0)
我会在像这样的构造函数中使用参数:
var Tile : Tile = new Tile(3,6);
或者如果你需要一个二传手:
package
{
public class Tile
{
private var _x : uint;
private var _isSetX : Boolean;
private var _y : uint;
private var _isSetY : Boolean;
public function set x(value : uint)
{
if (_isSetX)
return;
_x = value;
}
.......
}
}