如果你想要做这样的事情,你可以覆盖this[]
索引器属性,但您应该创建一个属性TemporaryPoints
而不是将其设置为public field
。这些可以结合到这样创造的东西:
public class MyRectangle
{
private PointF[] _temporaryPoints = new PointF[4];
protected PointF[] _savedPoints = new PointF[4];
// get TemporaryPoint by it's index
public PointF TemporaryPoint(int idx)
{
return (idx < _temporaryPoints.Length ? _temporaryPoints[idx] : default(PointF));
}
// set TemporaryPoint value at index idx
public void SetTemporaryPoint(int idx, PointF value)
{
if(idx < _temporaryPoints.Length) _temporaryPoints[idx] = value;
}
// get SavedPoint by it's index
public PointF SavedPoint(int idx)
{
return (idx < _savedPoints.Length ? _savedPoints[idx] : default(PointF));
}
// set SavedPoint value at index idx
public void SetSavedPoint(int idx, PointF value)
{
if(idx < _savedPoints.Length) _savedPoints[idx] = value;
}
//How to do something like this ?
protected PointF this[int idx]
{
get
{
return SavedPoint(idx);
}
set
{
SetSavedPoint(i, value);
SetTemporaryPoint(i, value);
}
}
}
既然你不能越权“属性的索引器属性”你应该做的界面,允许您设置只对特定的指数值。 这就是为什么有这种方法:SetTemporaryPoint(int idx, PointF value)
。 毕竟,你可以用它几乎一样的,你想要的是:
SetSavedPoint(0, new PointF(1,1)); // SavedPoints = [1;1] TemporaryPoints = [1;1]
SetTemporaryPoint(0, new PointF(4,4)); // SavedPoints = [1;1] TemporaryPoints = [4;4]
SetSavedPoint(0, TemporaryPoint(0)); // SavedPoints = [4;4] TemporaryPoints = [4;4]
但是,如果你真的到只使用this[]
索引属性。你可以做一些列举:
public enum POINTS_STORAGE { TEMPORARY = 0, SAVED = 1 };
然后在你this[]
索引器属性:
public PointF this[POINTS_STORAGE s, int idx]
{
get
{
if(s == POINTS_STORAGE.TEMPORARY)
return _temporaryPoints[idx];
else
return _savedPoints[idx];
}
set
{
if(s == POINTS_STORAGE.TEMPORARY)
_temporaryPoints[idx] = value;
else
_savedPoints[idx] = value;
}
}
然后你可以使用它像:
meRectangleReference[POINTS_STORAGE.SAVED, 0] = new PointF(1, 1); // SavedPoints = [1;1] TemporaryPoints = [1;1]
meRectangleReference[POINTS_STORAGE.TEMPORARY, 0] = new PointF(4,4); // SavedPoints = [1;1] TemporaryPoints = [4;4]
meRectangleReference[POINTS_STORAGE.SAVED, 0] = meRectangleReference[POINTS_STORAGE.TEMPORARY, 0]; // SavedPoints = [4;4] TemporaryPoints = [4;4]
要设置TemporaryPoints [i] =值;以及 – CodeConstruct