悬赏分:30 浏览:533 次
Public Class Class1
Private mName As String = ""
Property Name() As String
Get
Return mName
End Get
Set(ByVal value As String)
mName = value
End Set
End Property
End Class
如果可以用:Class1.Name().Tostring()这个得到Name的名称:"Name"...
也就是说如何给属性扩展一个方法:ToString()
|
用反射吧 System.Reflection 属性不可能有方法,只有属性返回的值才能有方法 可以用反射技术得到所有属性的名称,例如使用Type.GetProperties()方法 第一,Property实际上它本身就是一个或两个方法(getter/setter),那又如何能够给方法加上方法呢?这本身就错了。 第二,你的返回值不是已经是String了么?还转换什么啊? 看了3遍,看懂了;原来是要属性的名称,而不是值。 a.Name.GetType().Name 即可。 在程序源码中已经明确知道要使用属性Name 那么还有必要去获得这个属性的名称吗? 功能要和应用场景结合,请问?你的这个功能什么时候有用? 如下代码 通过测试 using System; using System.Collections.Generic; using System.Reflection; public class MyClass { public string Name { get{return "xxx";} } public static void Main() { string name_for_name = string.Empty; RL(); Type t =typeof(MyClass); PropertyInfo pi = t.GetProperty("Name"); name_for_name = pi.Name; WL(name_for_name); RL(); } #region Helper methods private static void WL(object text, params object[] args) { Console.WriteLine(text.ToString(), args); } private static void RL() { Console.ReadLine(); } private static void Break() { System.Diagnostics.Debugger.Break(); } #endregion } 如果你是需要从一个实体类中取得所有的列名,建议用下面的方法: PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(typeof(EntityType), filterAttributes); 这个方法可以去到所有的属性的一个集合,然后遍历这个集合,将在其中找出对应列的属性。(一般情况下,会使用PropertyDescriptor.GetCustomAttributes方法,然后判断其中是否包含特定的属性来判断是不是我们需要的属性) 呵呵,也不知道说的是不是你的问题。并且对于ORM不熟,因此不能给出完整的例子。请你再说详细一些你的需求。我好给出解决方案 呵呵.NET3.5可以帮你实现,利用它的新特性。 用 extension method(.NET 3.x) 不要想得那么复杂,我在生成实体类的时候一般会从数据库生成一个列名的字段名称的列表. 我自己写了一个小工具,可以从数据库的注释生成中英文列名. 在这里下载 http://www.cnblogs.com/darkangle/archive/2007/07/29/835395.html |
|
9个月前 Wilensky : 我想楼主是要在后面加点别的东西吧,最好再说详细点 |
|
9个月前 坚持信念 : PropertyInfo pi = t.GetProperty("Name"); name_for_name = pi.Name; ~~~~~~~~~~~~~~~~~~~~~~~~~ 兄弟真有意思,哈哈 |