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
,只要它有效。