如果你想要做這樣的事情,你可以覆蓋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