Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 属性问题_C#_Design Patterns_Oop_Attributes - Fatal编程技术网

C# 属性问题

C# 属性问题,c#,design-patterns,oop,attributes,C#,Design Patterns,Oop,Attributes,我需要一些帮助,我不知道如何解决这个问题 该属性的功能是确定该函数是否可以运行 所以我需要的是: 属性的使用者应该 能够确定是否可以 执行 属性的所有者应该是 能够告诉消费者,现在它 不能/不能执行(如 事件) 它必须有一个简单的语法 这是我到目前为止所做的,但它只实现了第1点,第3点 [AttributeUsage(AttributeTargets.Method, AllowMultiple = false)] public class ExecuteMethodAttribute : Att

我需要一些帮助,我不知道如何解决这个问题

该属性的功能是确定该函数是否可以运行

所以我需要的是:

  • 属性的使用者应该 能够确定是否可以 执行
  • 属性的所有者应该是 能够告诉消费者,现在它 不能/不能执行(如 事件)
  • 它必须有一个简单的语法
  • 这是我到目前为止所做的,但它只实现了第1点,第3点

    [AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
    public class ExecuteMethodAttribute : Attribute
    {
        private Func<object, bool> canExecute;
        public Func<object, bool> CanExecute
        {
            get
            {
                return canExecute;
            }
        }
    
    
        public ExecuteMethodAttribute()
        {
    
        }
    
        public ExecuteMethodAttribute(Func<object, bool> canExecute)
        {
            this.canExecute = canExecute;
        }
    }
    
    [AttributeUsage(AttributeTargets.Method,AllowMultiple=false)]
    公共类ExecuteMethodAttribute:属性
    {
    私人职能执行;
    公共职能执行
    {
    收到
    {
    返回canExecute;
    }
    }
    公共执行方法属性()
    {
    }
    公共执行方法属性(Func canExecute)
    {
    this.canExecute=canExecute;
    }
    }
    
    属性不适用于此类用途。您可以使用属性而不是特定实例来装饰类型

    如果您需要一种方法向使用者指定特定方法已准备好执行或无法执行,我将重新考虑您的设计。与使用属性相比,创建自定义类可能更合适


    考虑到您的设计,我建议您看一下。这基本上就是你想要做的。它使用“CanExecute”方法和事件将委托封装到类中,用于通知“使用者”执行可用性已更改。这将是一个更合适的选项。

    属性不适用于此类用途。您可以使用属性而不是特定实例来装饰类型

    如果您需要一种方法向使用者指定特定方法已准备好执行或无法执行,我将重新考虑您的设计。与使用属性相比,创建自定义类可能更合适


    考虑到您的设计,我建议您看一下。这基本上就是你想要做的。它使用“CanExecute”方法和事件将委托封装到类中,用于通知“使用者”执行可用性已更改。这将是一个更合适的选择。

    恐怕属性不适用于此。我宁愿选择界面。大概是这样的:

    public interface ICheckedMethod<TReturn, TParam>
    {
        TReturn Execute(TParam param);
        bool CanExecute { get; }
        event EventHandler CanExecuteChanged;
    }
    
    你会写:

    public class MyClass
    {
        public ICheckedMethod<object, bool> MyMethod { get; private set; }
    }
    
    公共类MyClass
    {
    公共ICheckedMethod MyMethod{get;private set;}
    }
    
    恐怕属性不适用于此。我宁愿选择界面。大概是这样的:

    public interface ICheckedMethod<TReturn, TParam>
    {
        TReturn Execute(TParam param);
        bool CanExecute { get; }
        event EventHandler CanExecuteChanged;
    }
    
    你会写:

    public class MyClass
    {
        public ICheckedMethod<object, bool> MyMethod { get; private set; }
    }
    
    公共类MyClass
    {
    公共ICheckedMethod MyMethod{get;private set;}
    }
    
    我当时在玩“MVVM”,我首先使用了ICommand,但后来我发现Blend 4在命令中使用了行为,但后来我失去了指定它是否可以执行的功能,所以我的想法是编写一个行为来赋予我这个功能…@Petoj:Blend 4使用行为,但它也使用命令。WPF和Silverlight(现在)都完全支持ICommand,这可以在Blend中使用。然而,它并没有它能做到的那么好-我有一个自定义行为,允许我绑定到ViewModel上的ICommand,这很好,因为你可以使用ExecuteCommandAction从内部触发它,并与之混合…我在玩“MVVM”首先我使用了ICommand,但后来我看到Blend 4在命令中使用了行为,但后来我失去了指定它是否可以执行的功能,所以我的想法是编写一个行为,它将赋予我这个功能…@Petoj:Blend 4使用行为,但它也使用命令。WPF和Silverlight(现在)都完全支持ICommand,这可以在Blend中使用。然而,这并没有它能做到的那么好-我有一个自定义行为,可以让我绑定到ViewModel上的ICommand,这很好,因为你可以使用ExecuteCommandAction从内部触发它,与之混合…我以前遇到过类似的情况。您将无法使用此属性,因为属性的参数必须是常量、类型或数组。我以前遇到过类似的情况。您将无法按原样使用此属性,因为属性的参数必须是常量、类型或数组。