[英]How to modify different boolean properties with one method within C#?
我目前面臨的Menu Strip
包含以下幾個不同設置的以下問題:
所有這些項目都具有bool
類型的相應屬性,因為這些變量也被傳遞給其他類。 當前,當我單擊“顯示Y”時,我有一個名為HandleShowY()
的專用功能,該功能可切換菜單條項中的bool
和選中標記。
對於每個新添加的屬性,一種新方法在我看來似乎是一種巨大的代碼味道,並且每個新屬性都需要大量的額外開銷。 因此,我想到了制作一個通用的HandleMenuStripItemBool()
的想法,該HandleMenuStripItemBool()
通過引用接收屬性和菜單項,這樣,只有一種方法可以處理這種行為。
不幸的是,在嘗試通過引用將bool
屬性傳遞給此方法時遇到了問題,我對action
, func
和delegate
已逐漸消失,並且在閱讀完每本新教程后只會越來越讓我感到困惑。
示例代碼:
// different properties of type bool, defined in form1
private bool ShowX { get; set; }
private bool ShowY { get; set; }
// generic menu strip item bool handler
private void HandleMenuStripItemBool(bool boolProp, ToolStripMenuItem menuItem)
{
// toggle bool depending on current value
// add check mark to or remove check mark from ToolStripMenuItem
}
// click event of the "Show X" menu strip item, defined in form1
private void showXToolStripMenuItem_Click(object sender, EventArgs e)
{
HandleMenuStripItemBool(ShowX, showXToolStripMenuItem);
}
// click event of the "Show Y" menu strip item, defined in form1
private void showYToolStripMenuItem_Click(object sender, EventArgs e)
{
HandleMenuStripItemBool(ShowY, showYToolStripMenuItem);
}
TL; DR:創建一種可以通過引用接收bool
類型的屬性的方法的最佳方法是什么,以便該方法可以重用於其他多個屬性?
提前致謝。
雖然沒有專門回答如何通過引用傳遞bool屬性,但為什么不只使用菜單項的Checked
值,在這種情況下,您將不需要維護bool屬性的值,並且僅具有一個來源。真相
private bool ShowX
{
get { return showXToolStripMenuItem.Checked; }
set { showXToolStripMenuItem.Checked = value; }
}
您可以將其作為參考傳遞並在方法中進行處理:
bool testBool;
ToggleBoolValue(ref testBool);
private void ToggleBoolValue(ref bool toggle)
{
toggle = !toggle;
// some other tasks
}
如果您使用的是非常現代的C#版本(我認為是7.0或更高版本),則可以使屬性返回ref
,然后按照Michal的建議使用ref
:
using System;
public class Bob
{
static void Main()
{
var b = new Bob();
b.showYToolStripMenuItem_Click();
Console.WriteLine(b.ShowY);
Console.ReadLine();
}
// different properties of type bool, defined in form1
private ref bool ShowX { get { return ref _showX; } }
private ref bool ShowY { get { return ref _showY; } }
private bool _showX = false;
private bool _showY = false;
// generic menu strip item bool handler
private void HandleMenuStripItemBool(ref bool boolProp)
{
boolProp = true;
}
// click event of the "Show X" menu strip item, defined in form1
private void showXToolStripMenuItem_Click()
{
HandleMenuStripItemBool(ref ShowX);
}
// click event of the "Show Y" menu strip item, defined in form1
private void showYToolStripMenuItem_Click()
{
HandleMenuStripItemBool(ref ShowY);
}
}
(已添加的主要功能和不相關的參數使之成為獨立的控制台演示)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.