在使用 C# 的 Visual Studio 2008 中,跨多个类和源文件共享代码的最佳方式是什么?
继承不是解决方案,因为类已经具有有意义的层次结构。
是否有一些类似于 C 包含文件的简洁功能,可以让您在另一个类中的任意位置插入代码?
EDIT:
好吧,我想我们需要一个具体的例子......
该领域中有数百个类,具有经过深思熟虑的类层次结构。现在,其中许多课程需要打印。有一个处理打印的实用打印机类。假设有 3 种不同的打印方法,具体取决于要打印的类。调用 print 方法(6 行)的代码是我试图避免在所有不同的客户端类页面之间复制和粘贴的代码。
如果人们不会假设他们对操作领域了解更多,那就太好了 - 特别是当他们特别提到不适合的技术时......
如果您在代表非常不同事物的类中经常使用的功能,根据我的经验,这些功能应该分为以下几类:
- 实用程序(例如字符串格式化、解析……)
- 跨领域关注点(日志记录、安全执行……)
对于实用程序类型的功能,您应该考虑创建单独的类,并在业务类中需要的地方引用实用程序类。
public class Validator
{
public bool IsValidName(string name);
}
class Patient
{
private Validator validator = new Validator();
public string FirstName
{
set
{
if (validator.IsValidName(value)) ... else ...
}
}
}
对于日志记录或安全性等横切问题,我建议您进行调查面向方面的编程 http://en.wikipedia.org/wiki/Aspect-oriented_programming.
关于其他评论中讨论的 PrintA 与 PrintB 示例,这听起来像是工厂模式的一个很好的案例。您定义一个接口,例如IPrint、PrintA 和 PrintB 类都实现 IPrint,并根据特定页面的需要分配 IPrint 的实例。
// Simplified example to explain:
public interface IPrint
{
public void Print(string);
}
public class PrintA : IPrint
{
public void Print(string input)
{ ... format as desired for A ... }
}
public class PrintB : IPrint
{
public void Print(string input)
{ ... format as desired for B ... }
}
class MyPage
{
IPrint printer;
public class MyPage(bool usePrintA)
{
if (usePrintA) printer = new PrintA(); else printer = new PrintB();
}
public PrintThePage()
{
printer.Print(thePageText);
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)