2

「直接」とは、次のものとは対照的に、Size*2 (これは機能しません) のようなものを意味します。

size1 = new Size(size1.Width * 2, size1.Height * 2);
4

4 に答える 4

5

技術的には拡張メソッドを書くことができます:

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);

インスタンスメソッドのように見えるため、ほとんど避けられない間違いです。静的ヘルパー メソッドを作成するだけです。

于 2012-04-22T16:39:05.290 に答える
4

* 演算子をオーバーロードできます。

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
于 2012-04-22T15:59:35.763 に答える
2

Size 構造体には * 演算子が実装されていないため、作成する必要があります。ただし、拡張メソッドでは、新しい演算子を作成することはできません。代わりに、たとえば、multiply という拡張メソッドを作成できます。

于 2012-04-22T16:01:43.300 に答える
0

仕事がないわけではありませんが、演算子をオーバーロードするのは非常に簡単です

codeproject での演算子のオーバーロードのデモを参照してください

一番下を見てください:

public static MySize operator +(MySize mySize, Int32 value)
{
    return new MySize(
        mySize.m_Width + value,
        mySize.m_Height + value);
}

* 演算子のオーバーロードを解決するのにそれほど時間はかからないはずです

于 2012-04-22T15:57:29.387 に答える