加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

基于PER-FILE的C#编译器常量?

发布时间:2020-12-15 21:04:01 所属栏目:百科 来源:网络整理
导读:是否可以在PER-FILE /项目项基础上定义编译器常量? 背景: 我想实现一个数据库抽象层(DAL),它将所有读取和写入任务分开,但是保留一个可以同时执行这两个操作的DAL,但是没有多次实现相同的方法(抽象类意味着每个都有1个实例类)支持的数据库类型). 所以我想像
是否可以在PER-FILE /项目项基础上定义编译器常量?

背景:
我想实现一个数据库抽象层(DAL),它将所有读取和写入任务分开,但是保留一个可以同时执行这两个操作的DAL,但是没有多次实现相同的方法(抽象类意味着每个都有1个实例类)支持的数据库类型).

所以我想像这样分开我的DAL:

abstract class ReadDAL
abstract class WriteDAL
abstract class ReadWriteDAL (multiple-inheritance from Read&Write-DAL).

不幸的是,这不起作用,因为C#不支持多重继承.

因此,解决此问题的一种方法是定义接口:

abstract class ReadDAL : IReadDAL
abstract class WriteDAL : IWriteDAL
abstract class ReadWriteDAL : IReadDAL,IWriteDAL

但是,如果我这样做,每次更改其中一个DAL中的方法时,我都必须更改接口定义,并更改ReadWriteDAL中定义的方法,并且我必须在方法实现的某处复制粘贴,这意味着会有一个不合规的混乱局面.

我想我能做的是第二次添加相同的文件作为链接,并在每个项目项目的基础上定义:

#if SOMECONSTANT // true if file is PartialReadDAL.cs
public partial abstract class ReadDAL
#else // false if "file" is link called "PartialReadWriteDAL.cs" symlinking to PartialReadDAL.cs
public partial abstract class ReadWriteDAL
#endif 
and here some implementation.

但我可以以某种方式定义每个文件的编译器常量吗?
或者以某种方式达到类似的效果?

解决方法

符号链接路线非常非常混乱.当被迫这样做时,我会通过将一些#defines作为预建步骤添加到相关文件中来实现.然后我会#if在代码中出现这些符号.我完全不喜欢这个:我的猜测是,即使我在构建结束后清除了这个标记,这也不会像我想的那样透明,所以它不会进入版本控制.

ReadWriteDAL是否包含它自己的某些状态,或者它只是调用ReadDAL和WriteDAL的方法调度程序?如果它只是一个调度程序,你可以考虑放弃实际的实现(ReadWriteDAL)并将调用传递给在组合根中注册的IReadDAL和IWriteDAL,使用dynamic proxy mechanism.我为Castle Windsor写了a tool like that.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读