c#中定义一个枚举类型

看一下c#中如何定义一个枚举类型:

internal enum Color ...{
White,                            // Assigned a value of 0
Red,                             // Assigned a value of 1
Green,                         // Assigned a value of 2
Blue,                          // Assigned a value of 3
Orange                     // Assigned a value of 4
}

在看一下编译后的样子:

internal struct Color : System.Enum ...{

public const Color White = (Color) 0;
public const Color Red = (Color) 1;
public const Color Green = (Color) 2;
public const Color Blue = (Color) 3;
public const Color Orange = (Color) 4;

//包含Color的变量值,不能写代码直接引用这个实例字段
public Int32 value__;
}

在看一下几种不同的输出Color值的方法

Color c = Color.Blue;
Console.WriteLine(c);                                                         //“Blue”   泛型格式
Console.WriteLine(c.ToString());                                         //“Blue” 泛型格式
Console.WriteLine(c.ToString("G"));                                  //“Blue” 泛型格式
Console.WriteLine(c.ToString("D"));                                  //“3”十进制格式

Console.WriteLine(c.ToString("X"));                                   //“03”十六进制格式

c#中的System.Enum类为我们提供了好多操作枚举类型的方法,下面举一个例子:Color[] colors = (Color[]) Enum.GetValues(typeof(Color));
Console.WriteLine("Number of symbols defined: " + colors.Length);
Console.WriteLine("Value Symbol ----- ------");
Chapter 12: Enumerated Types and Bit Flags 289
foreach (Color c in colors) ...{
Console.WriteLine("{0,5:D} {0:G}", c);
}

Value Symbol
--------- -----------
0 White
1 Red
2 Green
3 Blue
4 Orange

其他方法自己可以去尝试用一下。我们可以在枚举类型上应用位标记,这样在操作它的时候会进一步简单,譬如我们在写FileAttributes的时候可以这样写:

String file = @"C:Boot.ini";
FileAttributes attributes = File.GetAttributes(file);
Console.WriteLine("Is {0} hidden? {1}", file,
(attributes & FileAttributes.Hidden) == FileAttributes.Hidden);

下面看一下FileAttributes的定义:

[Flags, Serializable]
public enum FileAttributes ...{
Readonly = 0x0001,
Hidden = 0x0002,
System = 0x0004,
Directory = 0x0010,
Archive = 0x0020,
Device = 0x0040,
Normal = 0x0080,
Temporary = 0x0100,
SparseFile = 0x0200,
ReparsePoint = 0x0400,
Compressed = 0x0800,
Offline = 0x1000,
NotContentIndexed = 0x2000,
Encrypted = 0x4000
}
//Flags特性代表位标记的意思,Serializable特性代表可序列化

我们也可以在自己的枚举类型上应用位标记,简化操作。

所有c#中的数组都隐式继承自System.Array类型,所有数组都隐式实现IEnumerable,ICollection,和IList接口。在对数组进行强制转换的时候要记住值类型的数组不许可被转换成任何其它类型。下面看个例子:

FileStream[,] fs2dim = new FileStream[5, 10];
Object[,] o2dim = fs2dim;

//错误,维数不同
Stream[] s1dim = (Stream[]) o2dim;

Stream[,] s2dim = (Stream[,]) o2dim;
String[,] st2dim = (String[,]) o2dim;
Int32[] i1dim = new Int32[5];

//错误值类型不许转换
Object[] o1dim = (Object[]) i1dim;

//可以借助Array.Copy实现转换
Object[] ob1dim = new Object[i1dim.Length];
Array.Copy(i1dim, ob1dim, i1dim.Length);

我们知道c#中的数组是基于0索引的,但是可以用Array.CreateInstance创建不是0索引的。但是不推荐这样做,因为不是基于0索引的数组效率低,而基于0索引的数组微软做了好多优化工作,效率会很高的。

我们知道c#中只能实现单继承,但是可以实现多个接口,这样也就隐式的实现了多继承。c#中有两种实现接口的方法,分别为显示实现和隐式实现,下面看个例子:

public sealed class Program ...{
public static void Main() ...{
SimpleType st = new SimpleType();
st.Dispose();
IDisposable d = st;
d.Dispose();
}
}
internal sealed class SimpleType : IDisposable ...{
public void Dispose() ...{ Console.WriteLine("public Dispose"); }
void IDisposable.Dispose() ...{ Console.WriteLine("IDisposable Dispose"); }
}
//输出
public Dispose                                           //隐式接口的输出
IDisposable Dispose                                   //显示接口的输出,注意调用的方式!!

记住:在调用显示接口实现时一定要强制转换成接口类型才能使用。

下面看一下泛型接口和接口约束:

public static class SomeType ...{
private static void Test() ...{
Int32 x = 5;
Guid g = new Guid();
M(x);
M(g);
//以下调用非法
SomeType st=new SomeType();
M(st);
}
//约束条件是:T类型必须实现 IComparable, IConvertible 这两个接口,否则不能调用M方法。
private static Int32 M<T>(T t) where T : IComparable, IConvertible ...{
...
}
}


转自:

http://hi.baidu.com/whiskey_ping/item/b23bd1d2993483bc33db9089

http://hi.baidu.com/whiskey_ping/item/7440e3713445ff42ef1e53b0

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值