「直接」とは、次のものとは対照的に、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 という拡張メソッドを作成できます。
仕事がないわけではありませんが、演算子をオーバーロードするのは非常に簡単です
codeproject での演算子のオーバーロードのデモを参照してください
一番下を見てください:
public static MySize operator +(MySize mySize, Int32 value)
{
return new MySize(
mySize.m_Width + value,
mySize.m_Height + value);
}
* 演算子のオーバーロードを解決するのにそれほど時間はかからないはずです