【问题标题】:How can I create extension methods with static return type?如何创建具有静态返回类型的扩展方法?
【发布时间】:2010-09-20 22:20:08
【问题描述】:

我试图为 Color 静态类编写一个简单的扩展方法,它返回与该颜色等效的黑白。
问题是扩展方法不能返回 Static 类型...
那么,我该怎么做呢?!请帮我。

【问题讨论】:

  • 所以你想要一个方法Color ToBlackOrWhite(this Color color),其中Color 是一个静态类?那是行不通的。不仅不能将静态类作为返回类型,而且不能作为参数类型。因为它没有任何意义:如果您无法创建 Color 的实例,您将如何将颜色传递给方法?

标签: c# static extension-methods


【解决方案1】:

问题在于 NO 方法可以返回静态类型。静态类是无状态的(或只有静态状态),因此只有一个“实例”,可以从任何引用命名空间的代码全局访问。

你可以返回一个颜色; Color 类本身虽然有静态成员,但不是静态的,因此可以存在很多 Colors 实例。您还可以将扩展方法应用于颜色。如果这样做,则可以在非静态 Color 结构的静态成员之一上调用扩展方法:

public static class MyColorsExtensions
{

   public static Color ToGreyScale(this Color theColor) { ... }

}

...

var greyFromBlue = Color.Blue.ToGreyScale();

【讨论】:

    【解决方案2】:

    如果您指的是System.Drawing.Color - 它不是静态类......它是一个结构。您应该能够从方法中返回它的实例。碰巧Color 结构包含代表specific colors 的静态成员 - 例如:Color.BlackColor.White

    如果您不是指该类型,请发布失败的代码的简短示例。

    【讨论】:

    • 为了清楚起见,Color 也可以与任意 ARGB 值一起使用。
    【解决方案3】:

    很难理解你想说什么,但如果你试图为静态类创建扩展方法,那是不可能的,因为扩展方法是针对类实例的。

    【讨论】:

      【解决方案4】:

      这就是你要找的吗?这是一个返回静态颜色结构的扩展方法。

      public static class ColorExtensions
      {
          private static Color MYCOLOR = Color.Black;
          public static Color BlackAndWhiteEquivalent(this Color obj)
          {
              // stubbed in - replace with logic for find actual
              // equivalent color given what obj is
              return MYCOLOR;
          }
      }
      

      和测试

          [Test]
          public void FindBlackAndWhiteColorEquivalent()
          {
              Color equivalentColor = Color.Black.BlackAndWhiteEquivalent();
          }
      

      【讨论】:

        【解决方案5】:

        试试这个

        public static class Colores
        {
        public static Color Rojo = Color.FromArgb(0xE51600);
        public static Color Azul = Color.FromArgb(0x004183);
        public static Color Verde = Color.FromArgb(0x00865A);
        public static Color Plata = Color.FromArgb(0xC4C5C7);
        public static Color Gris = Color.FromArgb(0x58585A);
        public static Color Cafe = Color.FromArgb(0x632600);
        public static Color Negro = Color.Black;
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多