程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> 未簽名有元程序集 Unsigned Friend Assemblies,unsignedassemblies

未簽名有元程序集 Unsigned Friend Assemblies,unsignedassemblies

編輯:關於.NET

未簽名有元程序集 Unsigned Friend Assemblies,unsignedassemblies


C#中的訪問修飾符internal可以使類型在同程序集中可以被相互訪問。但有時會有這樣一個要求,我們希望一個程序集中的類型可以被外部的某些程序集訪問,如果設置成public的話,就被所有的外部程序集訪問;或是在單元測試中,測試代碼在另一個程序集中運行,但需要訪問正在測試的標記為internal的程序集中的成員。要達到上述要求我們可以使用有元程序集。

看例子:

我是在D盤上新建了一個“friend Assembly”文件夾,把所有的文件(.dll、.cs、.exe)都放在裡面。

1. 新建一個類庫,friend_unsigned_A.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.CompilerServices;

//friend_unsigned_A.cs
//Compile with
//csc/target:library friend_unsigned_A.cs

[assembly: InternalsVisibleTo ("friend_unsigned_B")] //定義friend_unsigned_B為有元程序集

namespace friend_unsigned_A
{
    //Type is internal by default
    class Class1
    {
        public void Test()
        {
            Console.WriteLine("Class1.Test");
        }
    }

    //Public type with internal member
    public class Class2
    {
        internal void Test()
        {
            Console.WriteLine("Class2.Test");
        }
    }
}

2. 打開VS開發人員命令行,csc /target:library friend_unsigned_A.cs

3. 新建一個控制台應用程序

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using friend_unsigned_A; //不要忘記添加命名空間

// friend_unsigned_B.cs
// Compile with: 
// csc /r:friend_unsigned_A.dll /out:friend_unsigned_B.exe friend_unsigned_B.cs
namespace friend_unsigned_B
{
    class Program
    {
        static void Main(string[] args)
        {
            // Access an internal type.
            Class1 inst1 = new Class1();
            inst1.Test();

            Class2 inst2 = new Class2();
            // Access an internal member of a public type.
            inst2.Test();

            System.Console.ReadLine();
        }
    }
}

4. 輸入命令行 

csc /r:friend_unsigned_A.dll /out:friend_unsigned_B.exe friend_unsigned_B.cs

 

5. 直接運行 friend_unsigned_B.exe

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved