在另一个项目

时间:2016-11-25 13:28:34

标签: c#

是否可以在项目中声明方法的类并在另一个中实现?类似的东西:

namespace projectA
{
    Class A
    {
        void toImplement()
        {
            //TODO
        }
        void print()
        {
              toImplement();
        }
    }
}
namespace projectB
{
    A.toImplement()
    {
        // print “projectB"
    }
}
namespace projectC
{
    A.toImplement()
    {
        // print “projectC"
    }
}

我不想创建一个带继承的新类,因为我想在类A中使用该方法。但是如果我在项目K中定义方法,那么方法将执行相同的操作,如果我从项目调用乙

3 个答案:

答案 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的新实例。