基本三层+实体层Model
Model中 有一个类 AbClassA
然后有 ClassB 和 ClassC 都继承至AbClassA
在Dal层里 对应的 也有 AbclassA
然后有 ClassB 和 ClassC 都继承至AbClassA
AbClassA方法如下:
public abstract int add(Model.AbClassA modAbClassA);
ClassB中有如下方法:
public override int add(Model.ClassB modClassB);
ClassC中有如下方法:
public override int add(Model.ClassC modClassC);
为什么这样会报错,其实这种结构很常见啊,比如说 有 客户 供应商两个类,很容易抽象出 往来单位 这个类啊?抽象类 和 实现类中的方法 虽然参数不一样,但是 他们 也是有 抽象与具体类的联系的啊。、? 为什么不行, 你们在 三层中 就不用这样的抽象吗? 难道 客户供应商 各写各的? 那以后又要加别的 呢? 如 代理商 等等 ~!? 这个问题 问了不下 5次了。忘朋友指点啊~!?
我把问题重新叙述一下,望各位帮忙啊
Model层
public abstract class 往来单位{}
public class 客户:往来单位{}
public class 供应商:往来单位{}
public class 代理商:往来单位{}
Dal层
public abstract class 往来单位
{
public abstract int add(Model.往来单位 mod往来单位){}
}
public class 客户:往来单位
{
public override int add(Model.客户 mod客户){}
}
代理商 和 供应商 跟客户差不多就不写了。
注意这里Dal层两个类的方法的参数 一个是 mod往来单位 一个是 mod客户 这里报错了,但是 客户 是 往来单位的子类 为什么会报错呢? 我觉得我这样的抽象是很合理的啊。包括以后用到一些设计模式 肯定会 用到 抽象类 这样的啊, 一般三层中 增 删 改 查这些操作 都不能用抽象么?
你model可以這樣設計。
但是對於dal層。
可以用泛型來處理。繼承一個統一的接口,或則加一個abstract 類。
如果非要你這樣的做,那在繼承類中,要和abstract 的方法簽名一樣。如果需要成功,在方法中需要進行轉換。轉換成實際的。
你一般遇到这样的问题的时候是怎么处理的呢? model做 抽象? bll层 dal层都不做抽象,各写各的吗?
@jionsoft: 用接口。
@無限遐想: 你是數據庫操作。建議用泛型。如果繼承abstract,則必須實現虛方法。繼承abstract,只是由於實現不一樣。如果在虛方法中,做新增,修改,刪除操作的話,必須進行轉換,轉換成相應的實體,才可以的。
@jionsoft: 你現在隨便下載一個網上的代碼的實現 ,就明白了。還有建議你理解一下abstract
我没有很明白你的意思,不过,从目前的理解来看,这个定义肯定不行。
你的抽象类定义的是public abstract int add(Model.AbClassA modAbClassA);,那么在派生类里也必须是public override int add(Model.AbClassA modAbClassA);而不能是public override int add(Model.ClassB modClassB);,假如你一定要public override int add(Model.ClassB modClassB);,那么你只能通过new这个操作符来控制。
我说个场景估计你就知道我想问什么了。 比如我做一个进销存的软件,有如下几个类:客户 供应商 代理商
这3个类 很明显可以 抽象出一个 类来 即 往来单位, 那么 在 实体层就会写一个抽象类public abstract 往来单位这个类,然后 客户 供应商 代理商 这3个类都去实现这个类, 那在 往来单位这个抽象类里 定义 增 删 改查 操作,子类必须要去实现, 就会出现我上面提到的问题了, 还是我根本就不该这样设计? 你们在 多层设计的时候 会怎么 处理? 难道3个 类 各写各的?
大哥 能给我个 你的联系方式么,这个问题 真的 困扰好久了。。
@jionsoft: 68558710
override的话,函数签名必须一致的啊
我说个场景估计你就知道我想问什么了。 比如我做一个进销存的软件,有如下几个类:客户 供应商 代理商
这3个类 很明显可以 抽象出一个 类来 即 往来单位, 那么 在 实体层就会写一个抽象类public abstract 往来单位这个类,然后 客户 供应商 代理商 这3个类都去实现这个类, 那在 往来单位这个抽象类里 定义 增 删 改查 操作,子类必须要去实现, 就会出现我上面提到的问题了, 还是我根本就不该这样设计? 你们在 多层设计的时候 会怎么 处理? 难道3个 类 各写各的?
@jionsoft: 肯定也是从基类来进行派生啊,不过,基类里定义了参数类型的,那没办法,只能按地个走
报的什么错误呢?