Enum的学习心得呵呵~~(象猪一样飞翔)
1这个不好的地方是调用的方法必须和Enum的对应
2以及--封装变化点有问题~~我在看一个前辈的文章的时候比较认同他的观点就是Enum应该是稳定的
3针对以上三点~~我将在明后天推出各升级版的
另:修改部分是原创~~思想来自于 aspnet4--感谢下作者哈哈
最后本程序没有实际意义
源代 :/Files/ajaxren/Enum.rar
2以及--封装变化点有问题~~我在看一个前辈的文章的时候比较认同他的观点就是Enum应该是稳定的
3针对以上三点~~我将在明后天推出各升级版的
另:修改部分是原创~~思想来自于 aspnet4--感谢下作者哈哈
最后本程序没有实际意义
源代 :/Files/ajaxren/Enum.rar
using System;
using System.Collections.Generic;
using System.Text;
这个例子也是在作者的基础上改的--再次感谢作者呵呵#region 这个例子也是在作者的基础上改的--再次感谢作者呵呵
namespace MyUtils.Day
{
class Program
{
static void Main(string[] args)
{
Day day = new Monday();
//Console.WriteLine(day.ToString(
// DayStyle.ChineseFullName |
// DayStyle.ChineseShortName |
// DayStyle.EnglishFullName |
// DayStyle.EnglishShortName |
// DayStyle.EnglishSingleLetter
//));
//上面的方法和下面的相等不过下面的看得优雅点,虽然使用的All但在枚举中定义同上面,所以参数也会传递进取
Console.WriteLine(day.ToString(
DayStyle.All
));
}
}
public abstract class Day
{
/**//// <summary>
/// 这是 DayStyle的类型
/// </summary>
internal StringBuilder m_Content = new StringBuilder();
/**//// <summary>
/// 这个是用来反射的对象
/// </summary>
internal static Monday TempMonday = new Monday();
public abstract string ChineseFullName();
public abstract string ChineseShortName();
public abstract string EnglishFullName();
public abstract string EnglishShortName();
public abstract string EnglishSingleLetter();
public abstract string ToString(DayStyle style);
/**//// <summary>
/// 存储缓冲对象
/// </summary>
public static System.Collections.Generic.List<DayStyle> DayStyles = new List<DayStyle>();
/**//// <summary>
/// 检索是否在泛型中缓存的数据和当前的枚举数据一样
/// </summary>
internal void isCheckEnum()
{
//--如果长度不相同就的从新缓冲
if ( DayStyles.Count==0)
FillEnum();
}
/**//// <summary>
/// 所有的方法集合
/// </summary>
public static System.Collections.Generic.Dictionary<string, System.Reflection.MethodInfo> MethodAll = new Dictionary<string, System.Reflection.MethodInfo>();
/**//// <summary>
/// 检查MethodInfo是否和静态变量中的吻合
/// </summary>
internal void isCheckMethodInfo()
{
if (MethodAll.Count == 0)
this.FileMothod();
}
/**//// <summary>
/// 缓冲所有的方法
/// </summary>
private void FileMothod()
{
MethodAll.Clear();
System.Reflection.MethodInfo[] Alls = typeof(Monday).GetMethods();
foreach (System.Reflection.MethodInfo onlay in Alls)
{
if(!MethodAll.ContainsKey(onlay.Name))
MethodAll.Add(onlay.Name, onlay);
}
}
//--重新填充数据
private void FillEnum()
{
DayStyles.Clear();
foreach (string onlyStyle in Enum.GetNames(typeof(DayStyle)))
{
DayStyles.Add((DayStyle)Enum.Parse(typeof(DayStyle),onlyStyle));
}
}
}
public class Monday : Day
{
public override string ChineseFullName()
{
return "星期一";
}
public override string ChineseShortName()
{
return "一";
}
public override string EnglishFullName()
{
return "Monday";
}
public override string EnglishShortName()
{
return "Mon";
}
public override string EnglishSingleLetter()
{
return "M";
}
/**//// <summary>
/// --特别注意这里是将用户所传输的所有的枚举都传进来了。
/// </summary>
/// <param name="style"></param>
/// <returns></returns>
public override string ToString(DayStyle style)
{
//--检测是否有枚举集合有没有数据
this.isCheckEnum();
//---检测方法集合中有没有数据
this.isCheckMethodInfo();
foreach (DayStyle onlyStryle in DayStyles)
{
//--根style中的每一个传入的数据进行&比较然后,在将每一位做|比较,由于|比较是只要有一个1就反回1变相代表就是存在了
if ((style & onlyStryle) != 0)
{
m_Content.Append(MethodAll[onlyStryle.ToString()].Invoke(Day.TempMonday, null).ToString());
}
}
return m_Content.ToString();
}
}
[Flags]
public enum DayStyle
{
ChineseFullName = 0x0001,
ChineseShortName = 0x0002,
EnglishFullName = 0x0004,
EnglishShortName = 0x0010,
EnglishSingleLetter = 0x0020,
All=ChineseFullName|ChineseShortName|EnglishFullName|EnglishShortName|EnglishSingleLetter
}
}
#endregion
using System.Collections.Generic;
using System.Text;
这个例子也是在作者的基础上改的--再次感谢作者呵呵#region 这个例子也是在作者的基础上改的--再次感谢作者呵呵
namespace MyUtils.Day
{
class Program
{
static void Main(string[] args)
{
Day day = new Monday();
//Console.WriteLine(day.ToString(
// DayStyle.ChineseFullName |
// DayStyle.ChineseShortName |
// DayStyle.EnglishFullName |
// DayStyle.EnglishShortName |
// DayStyle.EnglishSingleLetter
//));
//上面的方法和下面的相等不过下面的看得优雅点,虽然使用的All但在枚举中定义同上面,所以参数也会传递进取
Console.WriteLine(day.ToString(
DayStyle.All
));
}
}
public abstract class Day
{
/**//// <summary>
/// 这是 DayStyle的类型
/// </summary>
internal StringBuilder m_Content = new StringBuilder();
/**//// <summary>
/// 这个是用来反射的对象
/// </summary>
internal static Monday TempMonday = new Monday();
public abstract string ChineseFullName();
public abstract string ChineseShortName();
public abstract string EnglishFullName();
public abstract string EnglishShortName();
public abstract string EnglishSingleLetter();
public abstract string ToString(DayStyle style);
/**//// <summary>
/// 存储缓冲对象
/// </summary>
public static System.Collections.Generic.List<DayStyle> DayStyles = new List<DayStyle>();
/**//// <summary>
/// 检索是否在泛型中缓存的数据和当前的枚举数据一样
/// </summary>
internal void isCheckEnum()
{
//--如果长度不相同就的从新缓冲
if ( DayStyles.Count==0)
FillEnum();
}
/**//// <summary>
/// 所有的方法集合
/// </summary>
public static System.Collections.Generic.Dictionary<string, System.Reflection.MethodInfo> MethodAll = new Dictionary<string, System.Reflection.MethodInfo>();
/**//// <summary>
/// 检查MethodInfo是否和静态变量中的吻合
/// </summary>
internal void isCheckMethodInfo()
{
if (MethodAll.Count == 0)
this.FileMothod();
}
/**//// <summary>
/// 缓冲所有的方法
/// </summary>
private void FileMothod()
{
MethodAll.Clear();
System.Reflection.MethodInfo[] Alls = typeof(Monday).GetMethods();
foreach (System.Reflection.MethodInfo onlay in Alls)
{
if(!MethodAll.ContainsKey(onlay.Name))
MethodAll.Add(onlay.Name, onlay);
}
}
//--重新填充数据
private void FillEnum()
{
DayStyles.Clear();
foreach (string onlyStyle in Enum.GetNames(typeof(DayStyle)))
{
DayStyles.Add((DayStyle)Enum.Parse(typeof(DayStyle),onlyStyle));
}
}
}
public class Monday : Day
{
public override string ChineseFullName()
{
return "星期一";
}
public override string ChineseShortName()
{
return "一";
}
public override string EnglishFullName()
{
return "Monday";
}
public override string EnglishShortName()
{
return "Mon";
}
public override string EnglishSingleLetter()
{
return "M";
}
/**//// <summary>
/// --特别注意这里是将用户所传输的所有的枚举都传进来了。
/// </summary>
/// <param name="style"></param>
/// <returns></returns>
public override string ToString(DayStyle style)
{
//--检测是否有枚举集合有没有数据
this.isCheckEnum();
//---检测方法集合中有没有数据
this.isCheckMethodInfo();
foreach (DayStyle onlyStryle in DayStyles)
{
//--根style中的每一个传入的数据进行&比较然后,在将每一位做|比较,由于|比较是只要有一个1就反回1变相代表就是存在了
if ((style & onlyStryle) != 0)
{
m_Content.Append(MethodAll[onlyStryle.ToString()].Invoke(Day.TempMonday, null).ToString());
}
}
return m_Content.ToString();
}
}
[Flags]
public enum DayStyle
{
ChineseFullName = 0x0001,
ChineseShortName = 0x0002,
EnglishFullName = 0x0004,
EnglishShortName = 0x0010,
EnglishSingleLetter = 0x0020,
All=ChineseFullName|ChineseShortName|EnglishFullName|EnglishShortName|EnglishSingleLetter
}
}
#endregion