首页 / C# / 基于PER-FILE的C#编译器常量?
基于PER-FILE的C#编译器常量?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了基于PER-FILE的C#编译器常量?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1670字,纯文字阅读大概需要3分钟。
内容图文
是否可以在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.
内容总结
以上是互联网集市为您收集整理的基于PER-FILE的C#编译器常量?全部内容,希望文章能够帮你解决基于PER-FILE的C#编译器常量?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。