日期:2014-05-17  浏览次数:20711 次

如何实现类的同名成员属性静态和动态重载
就是想要下面这段代码的效果(我知道C#不支持,只是希望大家能提供一种变通的方法达到这种效果):

public class tblProduct
{
    public int ProductID { get; set; }
    public static string ProductID
    {
        get { return "tblProduct.ProductID"; }
    }
    public string ProductName { get; set; }
    public static string ProductName
    {
        get { return "tblProduct.ProductName"; }
    }
}

------最佳解决方案--------------------
tblProduct p = GetAProduct() ?? new tblProduct() { ProductID = "tblProduct.ProductID", ProductName = "tblProduct.ProductName" };
相当于
tblProduct p = GetAProduct();
if (p == null)
{
    p = new tblProduct();
    p.ProductID = "tblProduct.ProductID";
    p.ProductName = "tblProduct.ProductName";
}

    
------其他解决方案--------------------

tblProduct t1 = new tblProduct(){ProductName = "t1"};
tblProduct t2 = new tblProduct(){ProductName = "t2"};
string name = tblProduct.ProductName;  // t1 or t2 ?

------其他解决方案--------------------
为啥要用同名的呢?
 public class tblProduct
    {
        public int ProductID { get; set; }
        public string ProductName { get; set; }
        public struct Product
        {
            public static string ProductID = "tblProduct.ProductID";
            public static string ProductName = "tblProduct.ProductName";
        }
    }
------其他解决方案--------------------
我想用类的实例来存取数据,没有实例时,则只返回成员的名称。
你这个想法估计不是很好。
用类的实例调用时怎么可能返回静态属性呢?
比如下面的代码:
tblProduct tp = new tblProduct();
string pName = tp.ProductName;//调用实例需要对象引用,而静态属性要直接用类名来调用。
如果这个引用是null的话,直接就报错了。就算你上面的代码编译通过,也不可能调用到静态属性的。
------其他解决方案--------------------

class daoContext<T>
{
   public static T getModel(T pototype)
   {
      PopulateDBTo(prototype);
      return prototype;
   }
}

tblUser user = daoContext.getModel(new tblUser(){UserID = 100} );

------其他解决方案--------------------
哦,我错了,虽然上面的方法可以,不过似乎不是想要的东西,你仔细看了一下,其实你要得好像就是对象的元数据描述啊,如果是元数据描述,就不需要想了,自己扩一个geiMeta的静态方法,直接用反射把元数据描述提取出来就是了