如我有以下两个类
class A
{
protected static string MyGetType()
{}
}class B : A
{
}我想在调用B.MyGetType()时,在MyGetType()中获取B的类型,能做到吗?
不要用protected static string MyGetType(Type objType)的方式。
class A
{
protected static string MyGetType()
{}
}class B : A
{
}我想在调用B.MyGetType()时,在MyGetType()中获取B的类型,能做到吗?
不要用protected static string MyGetType(Type objType)的方式。
B.ToString(),虽然ToString()是object的函数,但B调用B.ToString()仍然可以得到B的TypeName,但是怎么实现的我不知道,有一种方式是StackTrace,但是调试的方法,不能用,有没有其它的方法啊?
typeof(B).Name不好吗?
http://www.cnblogs.com/smalldust/archive/2007/02/27/384657.html
想写实现一个EnumClass的基类,只要继承了EnumClass的如PrintType的都成为Enum Class,调用
PrintType.ToDescList()就可以返回所有枚举属性做为一个IList用于绑定DropDownList之类的,那个ToDescList()做为EnumClass的静态函数,但我调用PrintType.ToDescList()时,ToDescList()内部无法获取调用者的类型,即PrintType内型,所以上来请教,现在看来是没办法了,只好用EnumClassHelper来第三方执行EnumClassHelper.GetDescList(PrintType)这样的形式了,看有没有更好的方法,保留一天,明天再结。
附EnumClass类和EnumClassHelper类
/// <summary>
/// 枚举类,不可声明实例,可追加注释标签
/// </summary>
public class EnumClass
{
/// <summary>
/// 枚举类注释标签
/// </summary>
public class EnumDescription : Attribute
{
string descriptionValue; public EnumDescription(string description)
: base()
{
this.descriptionValue = description;
} public string Description
{
get
{
return descriptionValue;
}
}
} private string name;
public string Name
{
get { return name; }
} private string desc;
public string Desc
{
get { return desc; }
} protected EnumClass() { } internal EnumClass(string _name, string _desc)
{
name = _name;
desc = _desc;
}
}
/// <summary>
/// 枚举类工具类
/// </summary>
public class EnumClassHelper
{
/// <summary>
/// 获取枚举类的值集合,EnumClass(Name, Desc)集合
/// </summary>
/// <typeparam name="EnumClassType"></typeparam>
/// <returns></returns>
public static IList<EnumClass> GetEnumDescList<EnumClassType>()
{
Type enumType = typeof(EnumClassType);
if (!(enumType.BaseType.Name == "EnumClass"))
{
throw new InvalidOperationException("非枚举类要求获取值集合");
} FieldInfo[] staticFiles = enumType.GetFields(BindingFlags.Public | BindingFlags.Static);
IList<EnumClass> list = new List<EnumClass>();
for (int i = 0; i < staticFiles.Length; i++)
{
object[] attrs = staticFiles[i].GetCustomAttributes(typeof(EnumClass.EnumDescription), true);
if (attrs.Length > 0)
{
EnumClass enu = new EnumClass(((EnumClass.EnumDescription)attrs[0]).Description, staticFiles[i].GetValue(enumType).ToString());
list.Add(enu);
}
}
return list;
}
}