c# - 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)
有这样的属性的简写吗?
解决方案
没有直接等效于宏的方法。另一种方法是封装调用,以牺牲两个额外的方法为代价产生最小的更短属性,并将受影响的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;
}
推荐阅读
- exception - RocketMQ启动错误,打印信息:java.lang.ClassNotFoundException: org.apache.rocketmq.namesrv.NamesrvStartup
- swift - 在 Swift 中将 ui Image 制作成完美的圆圈
- jquery - 查找具有最多 td 的表行并将相等的 # td 添加到所有其他表行
- regex - 使用正则表达式仅匹配十进制数字,但我一直匹配非一位数字
- c - linux系统错误,errno 21是什么意思
- java - 如何在 Spring JPA/Hibernate 中使用 JoinTable 设置仅通过 ID 引用父级的子实体
- sql - 如果有 3 条重复记录,则选择两条重复记录
- node.js - 没有沙箱的 Actions SDK 对话框 nodejs 事务 API 示例
- html - 消除视频加载后的页面跳转
- python - Python Selenium 点击按钮