通過「直接」我的意思是這樣尺寸* 2(不工作),而不是:是否有直接的方法來乘以一個數字的大小或點?
size1 = new Size(size1.Width * 2, size1.Height * 2);
通過「直接」我的意思是這樣尺寸* 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);
一個幾乎不可避免的錯誤,因爲它看起來像一個實例方法。所以不要這樣做,只需編寫一個靜態輔助方法即可。
不是沒有工作,但它是很容易超負荷運營商
看到demo of operator overloading on codeproject
見右底部:
public static MySize operator +(MySize mySize, Int32 value)
{
return new MySize(
mySize.m_Width + value,
mySize.m_Height + value);
}
它不應該帶你長摸出*運算符重載
除了Size是一個結構體,結構體不能作爲另一個結構體或類的基礎,所以不可能爲它重載操作符。 – Chris 2012-04-22 16:00:34
如果你的猜測是正確的,大小是從.net類庫而不是他自己的混合物,那麼是的,你是正確的,缺乏一個凌亂的擴展方法,他被騙了 – 2012-04-22 16:06:26
可以重載運算符*:
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 struct你就必須創建一個。但通過擴展方法,不可能創建新的操作符。相反,您可以創建一個名爲multiply的擴展方法。
var newSize = size1 + size1 – Joe 2012-04-22 15:57:03
@Joe,這並不是乘法,這是他所要求的。 Size類提供了靜態方法Add和Subtract,但沒有用於直接乘法。 – Chris 2012-04-22 15:58:45