Csharp/CSharp Tutorial/Data Type/enum
Версия от 15:31, 26 мая 2010; (обсуждение)
Содержание
- 1 Assign enum value from a member and variable
- 2 Assign int value to enumerations
- 3 Declaration of enum data type
- 4 Define constants with const keywords and enum
- 5 Enumerations
- 6 Enumerations Initialization with calculation
- 7 Enumerations Initialization with integer value
- 8 Loop through the enum data type
- 9 Output enum element value
- 10 Pass enum data to a method
- 11 Print out the details of any enum
- 12 Readonly Fields with enum
- 13 Use an enumeration to index an array
- 14 Use enum data as flags
- 15 Use enum type categorize objects
- 16 Using enum as a member for a struct
Assign enum value from a member and variable
using System;
enum Color
{
Green,
Yellow,
Red
}
class MainClass
{
static void Main()
{
Color t1 = Color.Red;
Color t2 = Color.Green;
Color t3 = t2;
Console.WriteLine(t1);
Console.WriteLine(t2);
Console.WriteLine(t3);
}
}
Red Green Green
Assign int value to enumerations
using System;
enum Values
{
A = 1,
B = 5,
C = 3,
D = 42
}
class MainClass
{
public static void Main()
{
Values v = (Values) 2;
int ival = (int) v;
}
}
Declaration of enum data type
using System;
enum DaysOfWeek
{
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
Sunday
}
class MainClass
{
static void Main(string[] args)
{
DaysOfWeek Today = DaysOfWeek.Monday;
Console.WriteLine(Today);
}
}
Monday
Define constants with const keywords and enum
using System;
enum MyEnum
{
A
}
class Constants
{
public const MyEnum value3 = MyEnum.A;
}
class MainClass
{
public static void Main()
{
Console.WriteLine("{0}", Constants.value3);
}
}
A
Enumerations
- An enumeration is a set of named integer constants.
- The keyword enum declares an enumerated type.
The general form for an enumeration is
enum name {
enumeration list
};
- name specifies the enumeration type name.
- enumeration list is a comma-separated list of identifiers.
- Each of the symbols stands for an integer value.
- Each of the symbols has a value one greater than the symbol that precedes it.
- By default, the value of the first enumeration symbol is 0.
Enumerations Initialization with calculation
using System;
enum Values
{
A = 1,
B = 2,
C = A + B,
D = A * C + 33
}
class MainClass
{
public static void Member(Values value)
{
Console.WriteLine(value);
}
public static void Main()
{
Values value = 0;
Member(value);
}
}
0
Enumerations Initialization with integer value
enum Values
{
A = 1,
B = 5,
C = 3,
D = 42
}
Loop through the enum data type
using System;
class MainClass {
enum Week { Monday, Tuesday, Wednesday, Thursday, Friday, Saturaday,Sunday };
public static void Main() {
Week i;
for(i = Week.Monday; i <= Week.Sunday; i++)
Console.WriteLine(i + " has value of " + (int)i);
}
}
Monday has value of 0 Tuesday has value of 1 Wednesday has value of 2 Thursday has value of 3 Friday has value of 4 Saturaday has value of 5 Sunday has value of 6
Output enum element value
using System;
enum Color
{
red,
green,
yellow
}
public class MainClass
{
public static void Main()
{
Color c = Color.red;
Console.WriteLine("c is {0}", c);
}
}
c is red
Pass enum data to a method
using System;
public enum LineStyle
{
Solid,
Dotted,
DotDash,
}
class MainClass
{
public static void Main()
{
DrawLine(LineStyle.Solid);
DrawLine((LineStyle) 35);
}
public static void DrawLine(LineStyle lineStyle)
{
switch (lineStyle)
{
case LineStyle.Solid:
Console.WriteLine("draw solid");
break;
case LineStyle.Dotted:
Console.WriteLine("draw dotted");
break;
case LineStyle.DotDash:
Console.WriteLine("draw dotdash");
break;
default:
throw(new ArgumentException("Invalid line style"));
}
}
}
draw solid Unhandled Exception: System.ArgumentException: Invalid line style at MainClass.DrawLine(LineStyle lineStyle) at MainClass.Main()
Print out the details of any enum
using System;
using System.Collections.Generic;
using System.Text;
enum EmpType : byte
{
Manager = 10,
Grunt = 1,
Contractor = 100,
VicePresident = 9
}
class Program
{
static void Main(string[] args)
{
EmpType e2 = EmpType.Contractor;
DayOfWeek day = DayOfWeek.Friday;
ConsoleColor cc = ConsoleColor.Black;
EvaluateEnum(e2);
EvaluateEnum(day);
EvaluateEnum(cc);
}
static void EvaluateEnum(System.Enum e)
{
Console.WriteLine("=> Information about {0}", e.GetType().Name);
Console.WriteLine("Underlying storage type: {0}",Enum.GetUnderlyingType(e.GetType()));
Array enumData = Enum.GetValues(e.GetType());
Console.WriteLine("This enum has {0} members.", enumData.Length);
for (int i = 0; i < enumData.Length; i++)
{
Console.WriteLine("Name: {0}, Value: {0:D}", enumData.GetValue(i));
}
}
}
Readonly Fields with enum
public enum ColorEnum
{
Red,
Blue,
Green
}
class Color
{
public Color(int red, int green, int blue)
{
this.red = red;
this.green = green;
this.blue = blue;
}
public static Color GetPredefinedColor(ColorEnum pre)
{
switch (pre)
{
case ColorEnum.Red:
return(new Color(255, 0, 0));
case ColorEnum.Green:
return(new Color(0, 255, 0));
case ColorEnum.Blue:
return(new Color(0, 0, 255));
default:
return(new Color(0, 0, 0));
}
}
int red;
int blue;
int green;
}
class MainClass
{
static void Main()
{
Color background = Color.GetPredefinedColor(ColorEnum.Blue);
}
}
Use an enumeration to index an array
using System;
class MainClass {
enum Week { Monday, Tuesday, Wednesday, Thursday, Friday, Saturaday,Sunday };
public static void Main() {
Week i;
for(i = Week.Monday; i <= Week.Sunday; i++)
Console.WriteLine("Color of " + i + " is "+ (int)i);
}
}
Color of Monday is 0 Color of Tuesday is 1 Color of Wednesday is 2 Color of Thursday is 3 Color of Friday is 4 Color of Saturaday is 5 Color of Sunday is 6
Use enum data as flags
using System;
using System.Collections.Generic;
using System.Reflection;
using System.Runtime.InteropServices;
[Flags]
enum FileAccess
{
Read = 1,
Write = 2,
ReadWrite = 3
}
public class MainClass
{
public static void Main(){
FileAccess rw1 = FileAccess.Read | FileAccess.Write;
Console.WriteLine("rw1 == {0}", rw1);
FileAccess rw2 = FileAccess.ReadWrite;
Console.WriteLine("rw2 == {0}", rw2);
Console.WriteLine("rw1 == rw2? {0}", rw1 == rw2);
if (rw1 == FileAccess.Read)
Console.WriteLine("try #1: read permitted");
else
Console.WriteLine("try #1: read denied");
if ((rw2 & FileAccess.Read) != 0)
Console.WriteLine("try #2: read permitted");
else
Console.WriteLine("try #2: read denied");
}
}
rw1 == ReadWrite rw2 == ReadWrite rw1 == rw2? True try #1: read denied try #2: read permitted
Use enum type categorize objects
using System;
enum EmployeeTypeEnum
{
Employee,
Manager
}
class Employee
{
public Employee(string name, float billingRate)
{
this.name = name;
this.billingRate = billingRate;
type = EmployeeTypeEnum.Employee;
}
public float CalculateCharge(float hours)
{
if (type == EmployeeTypeEnum.Manager)
{
Manager c = (Manager) this;
return(c.CalculateCharge(hours));
}
else if (type == EmployeeTypeEnum.Employee)
return(hours * billingRate);
return(0F);
}
public string TypeName()
{
if (type == EmployeeTypeEnum.Manager)
{
Manager c = (Manager) this;
return(c.TypeName());
}
else if (type == EmployeeTypeEnum.Employee)
return("Employee");
return("No Type Matched");
}
private string name;
protected float billingRate;
protected EmployeeTypeEnum type;
}
class Manager: Employee
{
public Manager(string name, float billingRate) :
base(name, billingRate)
{
type = EmployeeTypeEnum.Manager;
}
public new float CalculateCharge(float hours)
{
if (hours < 1.0F)
hours = 1.0F; // minimum charge.
return(hours * billingRate);
}
public new string TypeName()
{
return("Civil Employee");
}
}
class MainClasss{
public static void Main(){
Employee[] earray = new Employee[2];
earray[0] = new Employee("A", 15.50F);
earray[1] = new Manager("B", 40F);
Console.WriteLine("{0} charge = {1}",
earray[0].TypeName(),
earray[0].CalculateCharge(2F));
Console.WriteLine("{0} charge = {1}",
earray[1].TypeName(),
earray[1].CalculateCharge(0.75F));
}
}
Employee charge = 31 Civil Employee charge = 40
Using enum as a member for a struct
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
enum orientation : byte
{
north = 1,
south = 2,
east = 3,
west = 4
}
struct route
{
public orientation direction;
public double distance;
}