TypeForwardedTo Attribute ---- 类型传递
什么是類型傳遞?
類型傳遞是一個(gè)屬性(在TypeForwardedTo中實(shí)現(xiàn)),它允許你將一個(gè)類型從一個(gè)程序集(程序集A)移動(dòng)到另一個(gè)程序集(程序集B),并且在客戶端實(shí)例化程序集A時(shí)不需要重新編譯,就可以運(yùn)行。在一個(gè)組件(程序集)載入并被客戶端應(yīng)用程序使用后,你可以用類型傳遞將組件中一個(gè)類型移動(dòng)到另一個(gè)程序集,而客戶端應(yīng)用程序仍將保持工作,不需要重新編譯。類型傳遞只能使用在從已存在的應(yīng)用程序引用的組件。當(dāng)你重新編譯一個(gè)應(yīng)用程序時(shí),在應(yīng)用程序中使用的任何類型都必須是恰當(dāng)?shù)某绦蚣?#xff08;這個(gè)程序集已存在)。
下面這些步驟用來(lái)將一個(gè)類型從一個(gè)類庫(kù)移動(dòng)到另一個(gè)。
1.添加一個(gè)TypeForwardedTo屬性到來(lái)源程序集類庫(kù)。
2.將類型聲明代碼剪切
3.將剪切的類型聲明代碼粘貼到目的類庫(kù)。
4.編譯兩個(gè)類庫(kù)
下面代碼示范將TypeA移動(dòng)到DestLib類庫(kù)的屬性聲明。
using System.Runtime.CompilerServices;
[assembly:TypeForwardedTo(typeof(DestLib.TypeA))]
?
1.新建一個(gè)類庫(kù)項(xiàng)目命名為Milan,里面有2個(gè)方法:
using System; using System.Collections.Generic; using System.Linq; using System.Text;namespace Milan {public class MyClass{public int Calculate(int x, int y){return x + y;}}public class MyResidentClassInLib1{public float CalculateRadius(float Radius){return (float)(2 * Radius * 3.141592654);}} }2.新建一個(gè)WinForm程序,拖放2個(gè)按鈕,分別調(diào)用這2個(gè)方法:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using Milan;namespace Calculate {public partial class Form1 : Form{public Form1(){InitializeComponent();}private void Calculate_Click(object sender, EventArgs e){MyClass myclass = new MyClass();MessageBox.Show(myclass.Calculate(10, 20).ToString());}private void CalculateRadius_Click(object sender, EventArgs e){MyResidentClassInLib1 lib = new MyResidentClassInLib1();MessageBox.Show(lib.CalculateRadius(200).ToString());}} }現(xiàn)在能成功運(yùn)行出結(jié)果。然后把Calculate方法移到另外一個(gè)程序集。
3.新建一個(gè)類庫(kù)項(xiàng)目,命名為Inter,同時(shí)把原來(lái)Milan項(xiàng)目里面的Calculate方法全部注釋,并把Calculate移到新的Inter項(xiàng)目,保證命名空間,方法都一樣:
using System; using System.Collections.Generic; using System.Linq; using System.Text;namespace Inter {public class Inter{} }namespace Milan {public class MyClass{public int Calculate(int x, int y){return x + y;}} }4.重新編譯Inter項(xiàng)目,Milan項(xiàng)目添加引用Inter的Dll,并在Milan項(xiàng)目的AssemblyInfo.cs文件里添加屬性:
[assembly: TypeForwardedTo(typeof(Milan.MyClass))]5.重新編譯Milan項(xiàng)目。
6.把重新編譯過(guò)的Inter.dll和Milan.dll同時(shí)拷貝到Winform項(xiàng)目調(diào)用的文件夾。
7.再次運(yùn)行,成功。
?
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/Scarface/archive/2012/07/19/2599680.html
總結(jié)
以上是生活随笔為你收集整理的TypeForwardedTo Attribute ---- 类型传递的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 复制本地文件完整路径
- 下一篇: CoreAnimation编程指南(六)