returnステートメントで使用する場合、BitWise OR( “|”)はどういう意味ですか?

bit-manipulation c# return
returnステートメントで使用する場合、BitWise OR( “|”)はどういう意味ですか?

C#.NETでは、このようなメソッド内でreturnステートメントを見たことがありますか?

protected override Buttons GetButtonsToShow()
{
    return Buttons.New | Buttons.Return | Buttons.Delete;
}

このBitWise演算子「|」はどうですかここで働いていますか? この声明の結果は何ですか? 以下の場合、BitWiseオペレーターがどのように機能するかを知っています…​ それ以外の場合 ステートメントなどが、私はそれがこのように使用されたことを見たことがない。

  1  0


ベストアンサー

「ボタン」はhttp://msdn.microsoft.com/en-us/library/system.flagsattribute.aspx[flags] enum

これにより、ビット単位の演算子を使用して値を結合できる場所でビットマップが可能になります。

この場合、3つのオプションすべてを組み合わせたビットマップである値を返します。

Thisブログの投稿には非常に明確な説明があります(例では `&`を使用しています)。

7


論理的にそのようなメソッドはフラグのセットを返します(enumは `Flags`属性でマークされます)。 後で、ビット単位の `&`を使用して特定のフラグが設定されているかどうかを確認できます。

この特定の例では、特定のボタンを表示するかどうかをチェックするコードがどこかにあります。 このようなもの:

Buttons buttons = GetButtonsToShow();

bool showNewButton = (buttons & Buttons.New) != 0;

1


この表現を分解すると、より明確になります。

protected override Buttons GetButtonsToShow()
{
    var returnValue = Buttons.New | Buttons.Return | Buttons.Delete;
    return returnValue;
}

今見えますか?

演算子| returnステートメント自体は変更されません。 `Buttons.Newの結果| Buttons.Return | Buttons.Delete`式は関数によって返されます。

0


ビット演算を実行し、結果を戻り値として使用しています。 Buttonsは、http://msdn.microsoft.com/en-us/library/system.flagsattribute.aspx [FlagsAttribute]が適用された列挙型で、次のようになります。

[Flags]
public enum Buttons
{
    New = 1,
    Return = 2,
    Delete = 4
}

GetButtonsToShow()メソッドからの戻り値の使用法は次のようになります。

private void DisplayButtons()
{
    var buttons = GetButtonsToShow(); // int value is 7, 1 + 2 + 4

    if ((buttons & Buttons.New) == Buttons.New) // if 7 (111) and 1 (001) equals 1
    {
        buttonNew.Visible = true;
    }

    // above is for clarity, most likely all buttons visibility is set as:
    // buttonX.Visible = (buttons & Buttons.X) == Buttons.X;
}

0


タイトルとURLをコピーしました