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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值