主题:[讨论]c#问题,高手指点
xclw
[专家分:380] 发布于 2006-10-26 22:55:00
有两个类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个回复)
沙发
sdcy [专家分:70] 发布于 2006-10-27 03:18:00
不知道你是不是这个意思,自己试着写了一下:
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
板凳
xclw [专家分:380] 发布于 2006-10-27 10:34:00
谢谢楼上的回复,差不多了,不过我的意思是能不能在基类中再决定具体调哪个属性,而不是在外部把属性做为参数传进去.
试想一下,每个实体类的属性(字段)肯定不同,而且可能是很多个.比如A.Save(),就能知道往A所对应的表中写入A的一些写入数据库的字段的值.而B.Save()就写B的相应字段.
当然可以事先指定每个类所对应的表名.可是每个类都要写一个不同Insert语句,能不能在基类用一个比较普遍的方法来实现Insert呢,到了基类中再根据不同的类进行不同的处理.
3 楼
yizhinantian [专家分:640] 发布于 2006-10-27 12:32:00
通过反射取得当前对象中的各个属性,然后写到数据库。应该可以。
4 楼
xclw [专家分:380] 发布于 2006-10-27 12:39:00
具体怎么做呢,能不能说一下?
5 楼
jzyray [专家分:20610] 发布于 2006-10-28 16:48:00
还是用接口吧……
6 楼
ekin624 [专家分:0] 发布于 2006-10-30 10:08:00
其实是一样的,你就算在基类中判断仍然要写判断选择语句,比如
class BaseClass
{
public string chose(string temp)
{
switch(获取表名函数)
{
case "表名1";
temp="连接字符串1";
break;
case "表名2"
temp="连接字符串2"
break;
default;
break;
}
return temp;
}
}
其实不管怎么判断,连接字符串总是要写的,都一样拉
我来回复