<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>友元程序集 on 冯威的博客</title><link>https://fwhyy.com/tags/%E5%8F%8B%E5%85%83%E7%A8%8B%E5%BA%8F%E9%9B%86/</link><description>Recent content in 友元程序集 on 冯威的博客</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Mon, 15 Nov 2010 00:00:00 +0800</lastBuildDate><atom:link href="https://fwhyy.com/tags/%E5%8F%8B%E5%85%83%E7%A8%8B%E5%BA%8F%E9%9B%86/atom.xml" rel="self" type="application/rss+xml"/><item><title>C#:友元程序集</title><link>https://fwhyy.com/2010/11/csharp-a-friend-assembly/</link><pubDate>Mon, 15 Nov 2010 00:00:00 +0800</pubDate><guid>https://fwhyy.com/2010/11/csharp-a-friend-assembly/</guid><description>&lt;p&gt;C#中的访问修饰符Internal可以说是介于Public和Private之间，可以使类型在同程序集中可以被互相访问。但有时会有这样的需求，我们希望一个程序集中的类型可以被外部的某些程序集可以访问，这时当然不能设置成Public，否则可以被所有的外部程序集访问。要达到上述要求我们可以使用友元程序集。&lt;/p&gt;
&lt;p&gt;下面用一个简单的例子来介绍下友元程序集。&lt;/p&gt;
&lt;p&gt;1 在一个解决方案中创建两个类库项目TestA和TestB，分别在两个类库项目中创建类A和类B。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://img.fwhyy.com/2022/202201290807599.webp" alt="2010-11-14_175103" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;p&gt;2 在项目TestA中添加对项目TestB的引用。&lt;/p&gt;
&lt;p&gt;3 将项目TestB中的类B访问级别设置为Internal。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;namespace TestB
{
 internal class B
 {

 }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;4 现在在TestA项目的类A中是肯定不能访问到类B的，如果想让类A可以访问类B，必须将项目TestA的程序集添加为项目TestB程序集的友元程序集。添加友元程序集我们要使用InternalIsVisibleTo特性，使用该特性需要添加命名空间&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;using System.Runtime.CompilerServices。
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;5 在B类中使用InternalIsVisibleTo特性将程序集TestA添加为友元程序集。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.CompilerServices;
[assembly: InternalsVisibleTo(&amp;#34;TestA&amp;#34;)]
namespace TestB
{
 internal class B
 {

 }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;6 InternalIsVisibleTo特性也可以添加到AssemblyInfo.cs中。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://img.fwhyy.com/2022/202201290808640.webp" alt="2010-11-14_181114" loading="lazy" decoding="async"&gt;
&lt;/p&gt;
&lt;p&gt;7 现在在项目TestA的类A中就可以访问TestB项目的类B了。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://img.fwhyy.com/2022/202201290808258.webp" alt="2010-11-14_181324" loading="lazy" decoding="async"&gt;
&lt;/p&gt;</description></item></channel></rss>