TypeForwardedTo Attribute ---- 类型传递
什么是類型傳遞?
類型傳遞是一個屬性(在TypeForwardedTo中實現),它允許你將一個類型從一個程序集(程序集A)移動到另一個程序集(程序集B),并且在客戶端實例化程序集A時不需要重新編譯,就可以運行。在一個組件(程序集)載入并被客戶端應用程序使用后,你可以用類型傳遞將組件中一個類型移動到另一個程序集,而客戶端應用程序仍將保持工作,不需要重新編譯。類型傳遞只能使用在從已存在的應用程序引用的組件。當你重新編譯一個應用程序時,在應用程序中使用的任何類型都必須是恰當的程序集引用(這個程序集已存在)。
下面這些步驟用來將一個類型從一個類庫移動到另一個。
1.添加一個TypeForwardedTo屬性到來源程序集類庫。
2.將類型聲明代碼剪切
3.將剪切的類型聲明代碼粘貼到目的類庫。
4.編譯兩個類庫
下面代碼示范將TypeA移動到DestLib類庫的屬性聲明。
using System.Runtime.CompilerServices;
[assembly:TypeForwardedTo(typeof(DestLib.TypeA))]
?
1.新建一個類庫項目命名為Milan,里面有2個方法:
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.新建一個WinForm程序,拖放2個按鈕,分別調用這2個方法:
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());}} }現在能成功運行出結果。然后把Calculate方法移到另外一個程序集。
3.新建一個類庫項目,命名為Inter,同時把原來Milan項目里面的Calculate方法全部注釋,并把Calculate移到新的Inter項目,保證命名空間,方法都一樣:
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項目,Milan項目添加引用Inter的Dll,并在Milan項目的AssemblyInfo.cs文件里添加屬性:
[assembly: TypeForwardedTo(typeof(Milan.MyClass))]5.重新編譯Milan項目。
6.把重新編譯過的Inter.dll和Milan.dll同時拷貝到Winform項目調用的文件夾。
7.再次運行,成功。
?
?
?
轉載于:https://www.cnblogs.com/Scarface/archive/2012/07/19/2599680.html
總結
以上是生活随笔為你收集整理的TypeForwardedTo Attribute ---- 类型传递的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 复制本地文件完整路径
- 下一篇: CoreAnimation编程指南(六)