我正在尝试为Color
静态类编写一个简单的扩展方法,它返回该颜色的黑白等价物。
问题是,扩展方法不能返回静态类型...
那么,我该怎么做?!请帮帮我。如何创建具有静态返回类型的扩展方法?
0
A
回答
8
问题是,NO方法可以返回一个静态类型。静态类是无状态的(或者只有静态状态),因此只有一个“实例”可以从引用该名称空间的任何代码全局访问。
您可以返回一个Color; Color类本身(尽管它具有静态成员)不是静态的,并且可以存在很多颜色实例。您也可以将扩展方法应用于Color。如果你这样做,那么你就可以在非静态的色彩结构的静态成员之一调用扩展方法:
public static class MyColorsExtensions
{
public static Color ToGreyScale(this Color theColor) { ... }
}
...
var greyFromBlue = Color.Blue.ToGreyScale();
4
如果你指的是System.Drawing.Color
- 它不是一个静态类......它是一个结构。你应该能够从一个方法返回它的一个实例。它恰巧发生在Color
结构包含代表specific colors
的静态成员 - 如:Color.Black
和Color.White
。
如果您不是指那种类型,那么请发布一个失败代码的简短示例。
+0
只是要清楚,Color也可以用于任意ARGB值。 – Nathan 2010-09-20 22:33:01
0
很难明白你想说什么,但如果你想为静态类创建扩展方法,这是不可能的,因为扩展方法是针对类实例的。
0
这是你在找什么?这是一个返回静态颜色结构的扩展方法。
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();
}
-2
试试这个
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;
}
相关问题
- 1. 扩展方法vs静态工具类
- 2. 扩展方法扩展静态类
- 3. 如何为动态类型创建MVC扩展方法
- 4. 扩展方法,返回接口类型
- 5. 为什么我无法为静态类创建扩展方法?
- 6. 扩展一个具有静态方法的类
- 7. 如何从静态方法返回值创建C#类实例?
- 8. 在非静态泛型类中没有扩展方法?
- 9. 扩展/重写Eloquent创建方法 - 不能使静态方法非静态
- 10. 静态类方法没有返回值
- 11. 静态方法与类扩展android.app.Application?
- 12. 静态构造函数不能有返回类型,但静态方法必须在C#中有返回类型
- 13. 类返回类型创建方法
- 14. 扩展返回父类型
- 15. Java泛型扩展返回类型的方法
- 16. 如何为Enum类型参数创建扩展方法?
- 17. 如何为类型创建扩展方法
- 18. 具有通用返回类型的Molling静态方法<T>
- 19. 具有静态方法的静态类和具有静态方法的常规类之间有什么不同?
- 20. 静态方法返回类的shared_ptr
- 21. 静态颜色类型初始化扩展方法
- 22. 扩展方法必须在非泛型静态类
- 23. 扩展方法必须在非泛型静态类
- 24. 扩展方法必须在非泛型静态类中定义
- 25. 如何从具有泛型返回类型的方法返回基元?
- 26. 扩展方法的静态类的方法
- 27. 静态返回类型宏
- 28. 是否可以创建静态扩展方法
- 29. 如果返回类型是静态也该方法是静态的
- 30. 创建扩展类型
所以,你想一个方法'颜色ToBlackOrWhite(这Colour彩色)''那里是Color'一个静态类?这是行不通的。不仅不能将静态类作为返回类型,而且也不能作为参数类型。因为它没有任何意义:如果您无法创建“Color”实例,如何将颜色传递给方法? – dtb 2010-09-20 22:23:51