是否可以在项目中声明方法的类并在另一个中实现?类似的东西:
namespace projectA
{
Class A
{
void toImplement()
{
//TODO
}
void print()
{
toImplement();
}
}
}
namespace projectB
{
A.toImplement()
{
// print “projectB"
}
}
namespace projectC
{
A.toImplement()
{
// print “projectC"
}
}
我不想创建一个带继承的新类,因为我想在类A中使用该方法。但是如果我在项目K中定义方法,那么方法将执行相同的操作,如果我从项目调用乙
答案 0 :(得分:3)
您可以创建一个抽象方法,但必须在另一个项目中访问public
:
namespace projectA
{
public abstract Class A
{
public abstract void toImplement();
}
}
namespace projectB
{
public Class B : A
{
public override void toImplement()
{
//Implement here
}
}
}
答案 1 :(得分:2)
您可以编写扩展功能,请参阅MSDN:Extension Function
只是为它添加方法, - 正如您在第二个代码示例中所述 - 您可以使用部分类
public static class B_Extensions
{
public static void SetString(this A a, string s)
{
a.Astring = s;
}
}
public class A
{
public string Astring { get; set; }
}
// In any other class
private void DoSomething()
{
var a = new A();
a.SetString("Something");
}
部分类: - 将它们放在同一个项目中
public partial class A
{
public void SetString(string s)
{
Astring = s;
}
}
public partial class A
{
public string Astring { get; set; }
}
答案 2 :(得分:0)
所以我的猜测是你不想让A
抽象并在其他项目中实现它是因为你希望能够在库中做new A()
。
在这种情况下,解决方案是使用工厂模式。
您将方法设为抽象,并声明工厂界面。
namespace projectA {
Class A
{
abstract void toImplement();
}
Interface AFactory
{
A create()
}
}
然后在您使用此项目的项目中,您将实施A
并建立工厂。
namespace projectB
{
Class RealA extends A
{
void toImplement() { does stuff }
}
Class RealAFactory implements AFactory
{
A create() { return new RealA() }
}
}
现在,您只需要将工厂传送到库中,或者在某些逻辑上将其传送到库中。现在projectA
只需RealA
即可获得RealAFactory
的新实例。