题
在Visual Studio2008年使用,什么是最好的方式来分享编码在多个类和来源的文件?
继承不是解决办法为该类已经有了一个有意义的层次结构。
是有一些很棒的功能,像一个C包括文件,让你插入代码任何你想要在另一类?
编辑:
ok,我想我们需要一个具体的例子...
有几百个类在该领域有一个深思熟虑的类状视图.现在,许多这类需要的印刷品。还是用打印机的类处理的印刷。让我们说有3个不同的印刷方法,是依赖于类正在打印。代码,电话打印的方法(6行)是我想要避免复制、粘贴在所有不同客户类页。
这将会是很好的,如果人们不会认为他们知道更多关于该领域的op-尤其是当他们具体提到技术不适合...
解决方案
如果你有功能经常使用的课表示非常不同的东西,在我的经验,应该落入几个类别:
- 公用事业(例如串的格式,分析,...)
- 交叉问题(记录,安全执行,...)
为实用新型的功能,你应该考虑建立单独的课程,并引用的实用工具类在这里需要在公务舱。
public class Validator
{
public bool IsValidName(string name);
}
class Patient
{
private Validator validator = new Validator();
public string FirstName
{
set
{
if (validator.IsValidName(value)) ... else ...
}
}
}
对于交叉问题,例如伐木或安全,我建议你调查 面向方面的编程.
关于与PrintAPrintB例中讨论的其他意见,这听起来像一个优秀的情况下,工厂生产的模式。你定义的一个接口,例如正、类PrintA和PrintB这两个正在实施和分配的一个实例正根据在什么特定的页面的需要。
// 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);
}
}
其他提示
您不能只是加载,你想,就像您在C进行与已经通过预处理指令加入到在C#中类代码
您可以,然而,定义一个接口,并宣布该接口的扩展方法。接口然后可以通过你的类来实现,你可以调用这些类的扩展方法。 E.g。
public interface IShareFunctionality { }
public static class Extensions
{
public static bool DoSomething(this IShareFunctionality input)
{
return input == null;
}
}
public class MyClass : Object, IShareFunctionality
{
public void SomeMethod()
{
if(this.DoSomething())
throw new Exception("Impossible!");
}
}
这将允许您重用的功能,但你不能访问类的私有成员就像你将能够,如果你可以,比如说,哈希包含文件。
我们可能需要你想要做虽然有些什么更具体的例子吗?
一个C#实用类将工作。它就像一个中央登记为通用代码(或类似的VB.NET模块构建) - 它应该包含的代码不是特定于否则它应该已经被连接到相关类的任何类。
您的不要要开始围绕复制源代码,如果你没有,因为这会导致代码更新问题考虑的复制即可。
只要源不需要保留状态,然后使用一个静态类用静态方法。
static public class MySharedMembers {
static public string ConvertToInvariantCase(string str) {
//...logic
}
// .... other members
}
如果类在相同的命名空间,没有必要为一个包括模拟。简单地调用在其他函数定义的类的成员。
如果他们在同一个命名空间不是,添加要在usings指令使用类的命名空间,它应该工作与上面相同。
我对这个问题感到困惑:看来你需要在你的基本OO理解工作
。我不知道的方式,包括文件的部分,但有一件事我们经常做的是从当前位置添加一个现有的文件和“链接”了。例如,我们每一项工程是指从一个解决方案目录中的AssemblyInfo.cs文件。我们修改了一次,所有的项目具有相同的信息,因为他们指的是同一个文件。
另外,关于重构建议在common.dll“常用”程序是我在.net中拿出最好的东西。
我不知道您说的“有意义”的结构意味着什么了,但是这听起来像在那里你可以使用基类实现的地方。虽然没有像“冗长”的C ++多重继承,你可能会得到一些好处出来用链式基类实现重用的通用功能。
可以保存类层次结构,至少在视觉上,并根据需要重写行为。
拉出重复代码进入服务。重复代码是一个线索,可能有一些重构。
例如,创建一个"PrintingService",其中包含的逻辑,需要进行打印。然后你可以拥有这类需要打印依赖这种服务(无论是通过构造或一个参数的方法要求的服务)。
另一个提示我们沿着这些路线是建立接口的基本功能,然后使用的接口,以代码。例如,我有一堆报告类别的用户可以传真、电子邮件或印刷品。而不是创建方法为每个,我制造了一个服务于每个,让他们实现一个接口,有一个单一的方法的输出().然后我可以通过每个服务以同样的方法取决于什么样的产出的用户想要的。当客户想使用而不是电邮传真的传真通过调制解调器,这只是一个问题写一个新的服务实现这种相同的接口。
说实话,我想不出类似的东西包括在Visual C#,也不知道为什么你会希望该功能。这就是说,部分类可以不喜欢它的声音,你想要什么,但使用起来可能擦出对你的“类已经有一个有意义的层次结构”的要求。
您有很多选择,TT,扩展方法,委托和λ