Gui*_*rme 3 c# animation enumeration
我知道对象枚举是Java对C#的少数几件事之一,有时我认为我错过了这个特性.
但我已经看到一些情况,一个类用于表示对象的枚举,使用常量字段,因此它可以"返回一个对象",而不是一个int.
一个例子是Brushes类.它的工作方式非常像枚举.
Brush b = Brushes.Blue;
Run Code Online (Sandbox Code Playgroud)
我们可以看到主要区别(至少对我而言)是需要其他类(类Brush)来存储从类Brushes返回的值(一些具有隐式运算符重载的代码可以做到这一点).
所以,我的问题是:良好的做法?
因为我正在考虑在我的项目中使用它来制作一个动画(WPF)的枚举,用于我创建的CustomControl.
这似乎对我好,并且比使用整数枚举更好,因为我需要检查一个switch-case来检测用户想要的动画.
在Java和C#中,枚举是一个根本不同的东西.在C#中,它们只是整数类型的名称,在Java中,它们更像是具有命名默认值的类.在C#中,具有一堆静态只读字段或属性的类是Java所谓的枚举,减去了switch它们的能力.
这种模式偶尔会出现,请参阅System.Drawing.Color和System.Text.Encoding
和大多数事情一样,只要你不滥用它,这是很好的做法.此模式通常用于仅为类或结构提供命名的默认值.确保该类可以独立存在,并且您不会严重依赖这些属性的名称.如果您需要偶尔检查某些东西,那么您可能会因为==操作员超载而逃脱.
如果你想要一些与Java的枚举完全相同的东西,那么你应该有一个内部存储类型的C#枚举,并做两件事之一:
例:
public enum FooType
{
A,
B,
C
}
public class Foo
{
public FooType Type { get; private set; }
// Option 1: forced via constructor
public Foo(FooType type)
{
this.Type = type;
}
// Option 2: static properties
// (using the constructor from option 1, can be done without it, though)
public static Foo A { get { return new Foo(FooType.A); } }
public static Foo B { get { return new Foo(FooType.B); } }
public static Foo C { get { return new Foo(FooType.C); } }
}
Run Code Online (Sandbox Code Playgroud)
用法:
Foo bar = new Foo(FooType.B);
// OR
Foo bar = Foo.B;
Run Code Online (Sandbox Code Playgroud)
能够切换:
switch (bar.Type)
{
case FooType.A:
break;
case FooType.B:
break;
case FooType.C:
break;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
229 次 |
| 最近记录: |