首页 > 解决方案 > C# 中是否有“直通”属性的简写?

问题描述

我正在我的应用程序中实现“保存/加载”功能。有各种类型的Vertex对象有很多静态字段,但显然你不能序列化静态字段。我正在创建一个其实例包含这些字段的类,并且为了避免填充这些字段的代码过多,我将它们作为属性来实现。

但是,执行此操作的语法似乎过于庞大,因此我正在寻找一种方法来简化它:

public Color CircleFillColor { get => CircleVertex.fillColor; set => CircleVertex.fillColor = value; }
public Color SquareFillColor { get => SquareVertex.fillColor; set => SquareVertex.fillColor = value; }
public Color TriangleFillColor { get => TriangleVertex.fillColor; set => TriangleVertex.fillColor = value; }

如果我们在 C# 中有,我可以这样写:

#define passthru(F) { get => F; set => F = value; }
public Color CircleFillColor passthru(CircleVertex.fillColor)
public Color SquareFillColor passthru(SquareVertex.fillColor)
public Color TriangleFillColor passthru(TriangleVertex.fillColor)

有这样的属性的简写吗?

标签: c#syntaxproperties

解决方案


没有直接等效于宏的方法。另一种方法是封装调用,以牺牲两个额外的方法为代价产生最小的更短属性,并将受影响的fillColor属性移动到每个方法中,而不是在每个属性中重复两次。

public Color CircleFillColor { get => GetColor(CircleVertex); set => SetColor(CircleVertex, value); }
public Color SquareFillColor { get => GetColor(SquareVertex); set => SetColor(SquareVertex, value); }
public Color TriangleFillColor { get => GetColor(TriangleVertex); set => SetColor(TriangleVertex, value); }

private Vertex GetColor(Vertex vertex)
{
  return vertex.fillColor;
}

private void SetColor(Vertex vertex, Color color)
{
  vertex.fillColor = color;
}

推荐阅读