回 帖 发 新 帖 刷新版面

主题:[讨论]c#问题,高手指点

有两个类A,B都继承于基类BaseClass,想在基类中实现方法ShowMessage();当类A调用时MessageBox.Show(A.P1),B调用时MessageBox.Show(B.P2).这个怎么实现。用泛型能实现吗?如果能实现,怎么实现,请高手指点。
class A:BaseClass
{
   public string P1
   {
     get{...}set{...}
   }
}

class B:BaseClass
{
   public string P2
   {
     get{...}set{...}
   }
}
class BaseClass
{   
    //showmessage
}


其实我是想做一个数据访问层,在基类中实现Save,Update和Delete方法。我不想用nhibernate或者其它的第三方工具,就想自己写一个。多多指教。

回复列表 (共6个回复)

沙发

不知道你是不是这个意思,自己试着写了一下:
using System;
class A:BaseClass
{
   public string P1
   {
     get{return "p1";}set{}
   }
}

class B:BaseClass
{
   public string P2
   {
     get{return "p2";}set{}
   }
}
class BaseClass
{   
    public void showmessage<E>(E str)
    {
        if (typeof(E) == typeof(string))
                Console.WriteLine(str);
    }
}
class start
{
        static void Main(string[] args)
        {
            A a=new A();
            a.showmessage<string>(a.P1);
            B b=new B();
            b.showmessage<string>(b.P2);
        }
}
结果:
p1
p2

板凳

谢谢楼上的回复,差不多了,不过我的意思是能不能在基类中再决定具体调哪个属性,而不是在外部把属性做为参数传进去.
试想一下,每个实体类的属性(字段)肯定不同,而且可能是很多个.比如A.Save(),就能知道往A所对应的表中写入A的一些写入数据库的字段的值.而B.Save()就写B的相应字段.
当然可以事先指定每个类所对应的表名.可是每个类都要写一个不同Insert语句,能不能在基类用一个比较普遍的方法来实现Insert呢,到了基类中再根据不同的类进行不同的处理.

3 楼

通过反射取得当前对象中的各个属性,然后写到数据库。应该可以。

4 楼

具体怎么做呢,能不能说一下?

5 楼

还是用接口吧……

6 楼

其实是一样的,你就算在基类中判断仍然要写判断选择语句,比如
class BaseClass
{   
    public string chose(string temp)
    {
          switch(获取表名函数)
           {
               case "表名1";
               temp="连接字符串1";
               break;
               case "表名2"
               temp="连接字符串2"
               break;
               default;
               break;
           }            
          return temp;
    } 


}

其实不管怎么判断,连接字符串总是要写的,都一样拉

我来回复

您尚未登录,请登录后再回复。点此登录或注册