【发布时间】:2019-02-06 07:17:39
【问题描述】:
我有一个名为FloatPlugIn 的课程。我希望用户能够做类似的事情
FloatPlugIn x = new FloatPlugIn();
x.Minimum = -100;
x.Maximum = 100;
float y = 123;
x = y;
这就是为什么我决定将implicit operator 添加到我的班级
public static implicit operator FloatPlugIn(float p)
{
return new FloatPlugIn() { Default = p };
}
问题是隐式运算符必须是静态的,这就是为什么在转换过程中创建我的类的新实例的原因。结果,我丢失了位于“旧”实例内部的所有信息。
有没有办法解决这个问题?我希望将浮点值应用于现有实例,而不是完全替换它。
【问题讨论】:
-
您不能使用赋值运算符“添加”。如果您作为无辜的开发人员阅读此代码,C# 语义与您期望发生的情况相匹配,而您的意图是颠覆它们。为什么不重载
+呢? -
我希望将浮点值添加到现有实例中... 那么
Add方法不是更合适吗? -
x.Default = y;怎么样? -
听起来您确实想在现有实例上设置属性。
-
没错。 assignment 分配了一个完全独立 实例,因此您当然会丢失该“旧”实例的所有信息。因此,您不需要assignement,而是modification。
标签: c#