gpt4 book ai didi

c# - Winforms 方法/事件过滤器属性

转载 作者:行者123 更新时间:2023-11-30 16:59:53 26 4
gpt4 key购买 nike

我使用 ASP.NET MVC 已经一年多了。我喜欢 ASP.NET MVC。与此同时,我时不时地开发一个 Windows 窗体应用程序。此应用程序允许我们的客户为其网上商店创建群组结构。

为此,我使用了 TreeView。这与 ASP.NET MVC 有什么关系?好吧,MVC 具有这些非常方便的操作过滤器属性,并使代码更具可读性(在我看来)。我的意思是过滤器,例如 [Authorize] 属性,如果用户未获得授权,它会停止执行操作。

所以实际的问题是,是否可以为 Windows 窗体应用程序中的方法和事件创建一个模拟过滤器?我需要检查(在很多方法和事件中)TreeViewSelectedNode 属性是否有值。现在我这样做:

private void setSelectedGroupInformation(bool refreshProductCount)
{
GroupNode selectedNode = trvGroupTree.SelectedNode;
if (selectedNode == null || !selectedNode.HasGroup)
return;

// Code that actually DOES something
}

但如果这是可能的,那就太好了:

[SelectedNodeRequired]
[GroupRequired]
private void setSelectedGroupInformation(bool refreshProductCount)
{
// Code that actually DOES something
}

这样可读性更好。我为此上网查了一下,但找不到类似的问题。

最佳答案

它可能很好,但您需要为它做一些工作(例如,在运行时构造一个类型)。比较容易做的是先调用一些常用的方法

[SelectedNodeRequired]
[GroupRequired]
private void setSelectedGroupInformation(bool refreshProductCount)
{
if(MethodTester())
return;
// Code that actually DOES something
}

bool MethodTester()
{
// use call stack to get caller method name
// use reflection to get attributes of method
// check attributes and conditions
...
return true; // if has to be filtered
...
return false;
}

但是,为什么不创建方法来实际执行您需要检查的所有逻辑呢?像这样

private void setSelectedGroupInformation(bool refreshProductCount)
{
if(Global.IsGroupRequired && Global.IsSelectedNodeRequired)
{
// Code that actually DOES something
}
}

关于c# - Winforms 方法/事件过滤器属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23009586/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com