通过“直接”,我的意思是 Size*2 (不起作用),而不是:
size1 = new Size(size1.Width * 2, size1.Height * 2);
您可以在技术上编写扩展方法:
public static class Extensions {
public static Size Multiply(this Size size, double factor) {
return new Size((int)(size.Width * factor), (int)(size.Height * factor));
}
}
但几乎没有人会正确使用它。他们会写
this.Size.Multiply(1.2);
而不是必需的
this.Size = this.Size.Multiply(1.2);
一个几乎不可避免的错误,因为它看起来像一个实例方法。所以不要这样做,只写一个静态辅助方法。
您可以重载 * 运算符:
class Size
{
public int Width { get; set; }
public int Height { get; set; }
public Size(int w, int h)
{
this.Width = w;
this.Height = h;
}
public static Size operator *(Size s, int n)
{
return new Size(s.Width * n, s.Height * n);
}
}
现在你可以这样做:
Size s1 = new Size(1, 2);
Size s = s1 * 2; // s.Height = 2, s.Width = 4
由于没有为Size 结构实现 * 运算符,因此您必须创建一个。但是使用扩展方法是不可能创建新的操作符的。相反,您可以创建一个名为 multiply 的扩展方法。
不是没有工作,但很容易使运算符重载
见右下角:
public static MySize operator +(MySize mySize, Int32 value)
{
return new MySize(
mySize.m_Width + value,
mySize.m_Height + value);
}
计算出 * 运算符重载应该不会花很长时间