反正這個概念我一般都是不去記得,首先看一下什麼是依賴: 有一個類是Animal,然後我定義了一個BlackCat類,類裡面有一個BlackCat方法,那麼這裡的BlackCat就依賴Animal BlackCat類實例化的時候需要一個Animal的對象作為構造函數的參數,那麼BlackCat就依賴A ...
反正這個概念我一般都是不去記得,首先看一下什麼是依賴:
有一個類是Animal,然後我定義了一個BlackCat類,類裡面有一個BlackCat方法,那麼這裡的BlackCat就依賴Animal
public class BlackCat { public BlackCat(Animal Cat) { Cry(); } }
BlackCat類實例化的時候需要一個Animal的對象作為構造函數的參數,那麼BlackCat就依賴Animal,這就叫依賴。
當然,不用構造函數的方式,在BlackCat類內部去new一個Animal,也是依賴;當然註入的話,就像是你寫了一個類,然後
通過IOC框架,把這個類註入到其他類中,這就是註入
控制反轉的意思就好理解了,就比如我定義了一個類,類裡面有一個方法,然後我現在要把這個方法的控制權交給別人來使用,這就是控制反轉。
在編寫代碼的時候,我們需要把一些介面編寫成通用的道理就在這裡了,便於做到代碼復用
下麵即以貓的例子來進行解說控制反轉
1.先定義一個動物類
using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace IOC { class Animal { public void Cry() { Console.Write("動物喊叫"); } } }
2.定義一個貓的類
using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace IOC { class Cat:Animal { public void Cry() { Console.WriteLine("動物喊叫"); } } }
3.我用實例化一個動物類,然後查看結果
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace IOC { class Program { static void Main(string[] args) { Animal A = new Cat(); A.Cry(); Console.ReadLine(); } } }
4.可以看到我用子類可以替換掉父類,也可以用父類替換掉子類,其實並沒有太大的影響
Animal A = new Cat();
可以看見輸出結果如下