Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.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#_Extension Methods - Fatal编程技术网

C# 有没有一种方法可以将扩展方法转换为属性?

C# 有没有一种方法可以将扩展方法转换为属性?,c#,extension-methods,C#,Extension Methods,问题来自两个要求: 我正在使用扩展方法扩展一个类(从没有源代码的其他地方) 我将把它绑定到windows窗体控件的一个属性,它需要一个属性 这是我目前的代码: public static class SomeClassExtender { public static string GetSomeProp(this SomeClass instance) { ... } public static void SetSomeProp(this SomeClass instance,

问题来自两个要求:

  • 我正在使用扩展方法扩展一个类(从没有源代码的其他地方)
  • 我将把它绑定到windows窗体控件的一个属性,它需要一个属性
  • 这是我目前的代码:

    public static class SomeClassExtender
    {
        public static string GetSomeProp(this SomeClass instance) { ... }
        public static void SetSomeProp(this SomeClass instance, string value) { ... }
    }
    
    public class SomeClassWrapper
    {
        private SomeClass instance;
        public SomeClassWrapper(SomeClass instance) { this.instance = instance; }
        public string SomeProp 
        {
            get { return this.instance.GetSomeProp(); } 
            set { this.instance.SetSomeProp(value); }
        }
    }
    

    这些代码确实有效,但我感兴趣的是,是否有更好的方法来实现这一点,可能是属性或其他什么?

    最好问问为什么不将SomeClass子类化?外部库中的许多方法都返回此类。我认为将它们都转换成子类是很乏味的。@brz我强烈建议不要将外部组件子类化。它给你们无法控制的部件带来了太高的耦合。包装和委派——正如上面的例子所做的那样——允许使用外部组件,而不会造成纠缠的混乱,您将永远无法再次解耦。我个人喜欢OP的方法。有时使用T4文本模板来生成包装器代码是值得的。