C# 当您没有对类库的引用时,在该类库中执行代码
假设我有这样一个类库:C# 当您没有对类库的引用时,在该类库中执行代码,c#,C#,假设我有这样一个类库: using ClassLibrary2; namespace ClassLibrary1 { public class Class1 : IClass1 { public string SayHello() { return "Hello"; } } } namespace C
using ClassLibrary2;
namespace ClassLibrary1
{
public class Class1 : IClass1
{
public string SayHello()
{
return "Hello";
}
}
}
namespace ClassLibrary2
{
public interface IClass1
{
string SayHello();
}
public class Class3
{
IClass1 _class1;
public Class3(IClass1 class1)
{
_class1 = class1;
string test = _class1.SayHello();
}
}
}
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
IClass1 class1 = new Class1();
Class3 class3 = new Class3(class1);
}
}
}
还有这样的类库:
using ClassLibrary2;
namespace ClassLibrary1
{
public class Class1 : IClass1
{
public string SayHello()
{
return "Hello";
}
}
}
namespace ClassLibrary2
{
public interface IClass1
{
string SayHello();
}
public class Class3
{
IClass1 _class1;
public Class3(IClass1 class1)
{
_class1 = class1;
string test = _class1.SayHello();
}
}
}
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
IClass1 class1 = new Class1();
Class3 class3 = new Class3(class1);
}
}
}
还有这样一个程序:
using ClassLibrary2;
namespace ClassLibrary1
{
public class Class1 : IClass1
{
public string SayHello()
{
return "Hello";
}
}
}
namespace ClassLibrary2
{
public interface IClass1
{
string SayHello();
}
public class Class3
{
IClass1 _class1;
public Class3(IClass1 class1)
{
_class1 = class1;
string test = _class1.SayHello();
}
}
}
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
IClass1 class1 = new Class1();
Class3 class3 = new Class3(class1);
}
}
}
ClassLibrary1引用ClassLibrary2。WindowsFormsApplication1引用了ClassLibrary1和ClassLibrary2
节目结束了。ClassLibrary2能够执行ClassLibrary1中的代码,即使ClassLibrary2不引用ClassLibrary1。这种技术叫什么?我想读更多关于它的内容并使用它。我意识到这是多态性。我指的是在类库中无依赖性地执行代码的技术。您在:依赖性反转原理中发现了D
针对接口而不是实现编程
您不是在ClassLibrary2中执行ClassLibrary1中的代码,而是在调用ClassLibrary2本身定义的接口中描述的功能。在运行时,ClassLibrary12635可能提供您调用的实现 如果我在一个单独的库中为DAL(数据访问层)组件定义一个接口,定义该DAL组件的功能,这将是一个非常有用的例子。我可以使用该接口在业务逻辑层(BLL)中实现业务逻辑(我需要使用该接口引用库)
对于DAL本身,我可以实现不同的实现,并创建两个不同的库—例如,一个使用本地、客户端存储,另一个使用集中数据库。然后,我可以用一个DAL库替换另一个DAL库,而无需更改业务逻辑中的一行代码。谢谢。我想依赖性倒置是一种很好的做法。什么是classlibrary12635+1作为可靠的参考。
classlibrary12635
只是另一个可能存在的类库,或者您可以编写的类库,或者可能出现的类库,恰好也实现了IClass1
接口。关键是ClassLibrary3根本不应该关心实现IClass1的是ClassLibrary1、classlibrary12635还是somethirdpartylibrary
,只要它有效。