跳至页脚内容
.NET 帮助

C# Internal(开发人员如何使用)

在静态 void main 程序中管理表单类、方法和属性的可见性时,访问修饰符在 C# 的基于组件的开发编程语言中是必不可少的。 在构建模块化且可维护的图形用户界面时,一个相关的访问修饰符是 internal。 本文将讨论 C# internal 的概念,以及其在 IronPDF(一个用于管理 PDF 文档的灵活 C# 框架)中的多个应用。

如何在 C# 组件开发中使用内部成员

  1. 创建一个 C# 项目。
  2. 理解 internal 访问修饰符。
  3. 将 'internal' 应用于成员。
  4. 在程序集级别组织代码。
  5. 在同一程序集内使用 internal 成员。
  6. 编译代码。

理解内部访问修饰符

C# 中的 internal 关键字/访问修饰符限制了某个类型或成员的可见性,仅限于同一程序集内的其他成员。 这意味着任何类、无论是继承类、方法或属性标记为 internal,都可以被同一程序集内的其他类型访问,但无法被程序集外的类型访问。 这种访问控制程度对于封装非常重要,因为它让您能够以私密的方式指定仅在同一程序集内部使用的实现细节。

在 C# 中,您可以以以下方式使用 internal 修饰符:

内部类

使用 internal 声明一个仅在同一程序集内可用的类。

// Assembly1
internal class InternalClass
{
    // Members of InternalClass
}
// Assembly1
internal class InternalClass
{
    // Members of InternalClass
}
' Assembly1
Friend Class InternalClass
	' Members of InternalClass
End Class
$vbLabelText   $csharpLabel

内部类 Members

通过应用 internal 限制类成员(如字段、属性和方法)的可见性到同一程序集。

// Assembly1
internal class MyClass
{
    internal static int InternalField;
    internal void InternalMethod() { }
}
// Assembly1
internal class MyClass
{
    internal static int InternalField;
    internal void InternalMethod() { }
}
' Assembly1
Friend Class [MyClass]
	Friend Shared InternalField As Integer
	Friend Sub InternalMethod()
	End Sub
End Class
$vbLabelText   $csharpLabel

内部接口

使用 internal 访问修饰符声明一个只能在同一程序集内访问的接口。

// Assembly1
internal interface IInternalInterface
{
    // Interface members
}
// Assembly1
internal interface IInternalInterface
{
    // Interface members
}
' Assembly1
Friend Interface IInternalInterface
	' Interface members
End Interface
$vbLabelText   $csharpLabel

内部嵌套类

使用 internal 声明一个只能在同一程序集内访问的嵌套类。

// Assembly1
public class OuterClass
{
    internal class InternalNestedClass
    {
        // Members of InternalNestedClass
    }
}
// Assembly1
public class OuterClass
{
    internal class InternalNestedClass
    {
        // Members of InternalNestedClass
    }
}
' Assembly1
Public Class OuterClass
	Friend Class InternalNestedClass
		' Members of InternalNestedClass
	End Class
End Class
$vbLabelText   $csharpLabel

内部程序集

通过在程序集级别应用 internal 限制外部程序集的访问。

using System.Runtime.CompilerServices;

// Allowing "ExternalAssembly" to access internal members of this assembly
[assembly: InternalsVisibleTo("ExternalAssembly")]
using System.Runtime.CompilerServices;

// Allowing "ExternalAssembly" to access internal members of this assembly
[assembly: InternalsVisibleTo("ExternalAssembly")]
Imports System.Runtime.CompilerServices

' Allowing "ExternalAssembly" to access internal members of this assembly
<Assembly: InternalsVisibleTo("ExternalAssembly")>
$vbLabelText   $csharpLabel

在开发和测试过程中,可以通过使用 InternalsVisibleTo 属性,使内部访问修饰符对指定的外部程序集可用。

// Assembly A
public class MyClassA
{
    internal void MyInternalMethod()
    {
        // Implementation details only accessible within Assembly A
    }
}

// Assembly B
public class MyClassB
{
    void SomeMethod()
    {
        MyClassA myObject = new MyClassA();
        myObject.MyInternalMethod(); // This will result in a compilation error
    }
}
// Assembly A
public class MyClassA
{
    internal void MyInternalMethod()
    {
        // Implementation details only accessible within Assembly A
    }
}

// Assembly B
public class MyClassB
{
    void SomeMethod()
    {
        MyClassA myObject = new MyClassA();
        myObject.MyInternalMethod(); // This will result in a compilation error
    }
}
' Assembly A
Public Class MyClassA
	Friend Sub MyInternalMethod()
		' Implementation details only accessible within Assembly A
	End Sub
End Class

' Assembly B
Public Class MyClassB
	Private Sub SomeMethod()
		Dim myObject As New MyClassA()
		myObject.MyInternalMethod() ' This will result in a compilation error
	End Sub
End Class
$vbLabelText   $csharpLabel

在此示例中,由于 MyInternalMethod 被指定为内部成员,因此只能在程序集 A 中访问。 如果您尝试从程序集 B 访问此函数,将会发生编译错误。

结合 protected 和 internal 访问修饰符会产生 protected internal 访问修饰符。 通过 protected internal 复合访问修饰符,派生类型可以在其程序集内部和外部访问一个成员(方法、属性或字段)或一个类型(类、接口或委托)。 protected internal 访问级别在保护和 internal 访问级别分别提供的可见性之间提供了平衡。

IronPDF。

使用 C# 编程语言,IronPDF 官方网站 是一个 .NET 库,使开发人员能够生成、编辑和修改 PDF 文档。 它提供了多种工具和功能,以多种方式与 PDF 文件交互,包括从 HTML 创建 PDF,将 HTML 转换为 PDF,合并或拆分 PDF 文档,以及为现有 PDF 附加注释、文本和照片。

安装IronPDF

获取 IronPDF 库; 这对于将来的补丁是必需的。 在包管理器控制台中输入以下命令以完成此操作:

Install-Package IronPdf

C# Internal(开发者如何工作):图 1 - 安装 IronPDF

使用 NuGet 包管理器搜索包 "IronPDF" 是另一种选择。我们可以从与 IronPDF 相关的所有 NuGet 包列表中选择并下载所需的包。

C# Internal(开发者如何工作):图 2 - IronPDF 包

IronPDF在HTML到PDF转换方面表现出色,确保精确保留原始布局和样式。 它非常适合从基于Web的内容中创建PDF,如报告、发票和文档。 利用对HTML文件、URL和原始HTML字符串的支持,IronPDF轻松生成高质量的PDF文档。

using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
Imports IronPdf

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim renderer = New ChromePdfRenderer()

		' 1. Convert HTML String to PDF
		Dim htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>"
		Dim pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent)
		pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf")

		' 2. Convert HTML File to PDF
		Dim htmlFilePath = "path_to_your_html_file.html" ' Specify the path to your HTML file
		Dim pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath)
		pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf")

		' 3. Convert URL to PDF
		Dim url = "http://ironpdf.com" ' Specify the URL
		Dim pdfFromUrl = renderer.RenderUrlAsPdf(url)
		pdfFromUrl.SaveAs("URLToPDF.pdf")
	End Sub
End Class
$vbLabelText   $csharpLabel

IronPDF的功能

  • 将 HTML 转换为 PDF:使用 IronPDF,您可以从任何类型的 HTML 信息(包括文件、URL 和 HTML 代码字符串)创建 PDF 文档。
  • PDF 生成:使用 C# 编程语言,您可以以编程方式向 PDF 文档添加文本、图形和其他组件。
  • PDF 操作:IronPDF 提供分割 PDF 文件成多个文件、合并多个 PDF 文档成单个文件和修改现有 PDF 的功能。
  • PDF 表单:在需要收集和处理表单数据的情况下,库允许用户创建和填写 PDF 表单,从而有用。
  • 安全功能:可以使用 IronPDF 对 PDF 文档进行密码和权限保护以及加密。
  • 文本提取:可以使用 IronPDF 从 PDF 文件中提取文本。

PDF 处理的封装与 IronPDF

IronPDF 提供了生成、修改和处理 PDF 文档的广泛功能。 通过将 PDF 处理代码封装在内部类或方法中,可以将实现细节隐藏在程序集中。 要了解更多 IronPDF 的信息,请参阅 IronPDF 文档

检查以下情况:

// Assembly A (PDFHandlingLibrary)
internal class PdfProcessor
{
    internal void AddWatermark(IronPdf.PdfDocument pdfDocument, string watermarkText)
    {
        // Implementation details for adding a watermark using IronPDF
    }

    internal IronPdf.PdfDocument MergePdfDocuments(IEnumerable<IronPdf.PdfDocument> pdfDocuments)
    {
        // Implementation details for merging PDF documents using IronPDF
        IronPdf.PdfDocument mergedPdfDocument = new IronPdf.PdfDocument();
        // Logic to merge documents
        return mergedPdfDocument;
    }
}

// Assembly B (MainApplication)
public class MainClass
{
    void ProcessPdfDocuments()
    {
        // Create an instance of the PdfProcessor within the same assembly
        PdfProcessor pdfProcessor = new PdfProcessor();

        // Assuming pdfDocumentList is defined
        IEnumerable<IronPdf.PdfDocument> pdfDocumentList = new List<IronPdf.PdfDocument>();

        // Accessing internal methods within the same assembly is allowed
        pdfProcessor.AddWatermark(new IronPdf.PdfDocument(), "Confidential");
        IronPdf.PdfDocument mergedPdf = pdfProcessor.MergePdfDocuments(pdfDocumentList);
    }
}
// Assembly A (PDFHandlingLibrary)
internal class PdfProcessor
{
    internal void AddWatermark(IronPdf.PdfDocument pdfDocument, string watermarkText)
    {
        // Implementation details for adding a watermark using IronPDF
    }

    internal IronPdf.PdfDocument MergePdfDocuments(IEnumerable<IronPdf.PdfDocument> pdfDocuments)
    {
        // Implementation details for merging PDF documents using IronPDF
        IronPdf.PdfDocument mergedPdfDocument = new IronPdf.PdfDocument();
        // Logic to merge documents
        return mergedPdfDocument;
    }
}

// Assembly B (MainApplication)
public class MainClass
{
    void ProcessPdfDocuments()
    {
        // Create an instance of the PdfProcessor within the same assembly
        PdfProcessor pdfProcessor = new PdfProcessor();

        // Assuming pdfDocumentList is defined
        IEnumerable<IronPdf.PdfDocument> pdfDocumentList = new List<IronPdf.PdfDocument>();

        // Accessing internal methods within the same assembly is allowed
        pdfProcessor.AddWatermark(new IronPdf.PdfDocument(), "Confidential");
        IronPdf.PdfDocument mergedPdf = pdfProcessor.MergePdfDocuments(pdfDocumentList);
    }
}
' Assembly A (PDFHandlingLibrary)
Friend Class PdfProcessor
	Friend Sub AddWatermark(ByVal pdfDocument As IronPdf.PdfDocument, ByVal watermarkText As String)
		' Implementation details for adding a watermark using IronPDF
	End Sub

	Friend Function MergePdfDocuments(ByVal pdfDocuments As IEnumerable(Of IronPdf.PdfDocument)) As IronPdf.PdfDocument
		' Implementation details for merging PDF documents using IronPDF
		Dim mergedPdfDocument As New IronPdf.PdfDocument()
		' Logic to merge documents
		Return mergedPdfDocument
	End Function
End Class

' Assembly B (MainApplication)
Public Class MainClass
	Private Sub ProcessPdfDocuments()
		' Create an instance of the PdfProcessor within the same assembly
		Dim pdfProcessor As New PdfProcessor()

		' Assuming pdfDocumentList is defined
		Dim pdfDocumentList As IEnumerable(Of IronPdf.PdfDocument) = New List(Of IronPdf.PdfDocument)()

		' Accessing internal methods within the same assembly is allowed
		pdfProcessor.AddWatermark(New IronPdf.PdfDocument(), "Confidential")
		Dim mergedPdf As IronPdf.PdfDocument = pdfProcessor.MergePdfDocuments(pdfDocumentList)
	End Sub
End Class
$vbLabelText   $csharpLabel

在此示例中,程序集 A 的 PdfProcessor 类使用 IronPDF 封装了 PDF 处理代码。 由于这些方法被指定为 internal,因此只能由同一程序集的其他 internal 成员访问。 程序集 B 的 MainClass 可以轻松地使用这些 internal 函数。 要了解更多 IronPDF 代码的信息,请参阅 IronPDF HTML 到 PDF 示例

C# Internal(开发者如何工作):图 3 - 输出

结论

最后,C# internal 修饰符提供了对程序集内可见的类型和成员的强大控制。 它有助于在与 IronPDF 结合使用的情况下创建安全、模块化和可维护的应用程序。 通过将与 IronPDF 相关的代码封装在内部类或方法中,您可以在抽象、安全性和可用性之间取得妥协。 在处理像 IronPDF 这样管理重要功能(例如 PDF 文档处理)的库时,尤其重要的是采用封装和受限访问的概念,以便在 C# 应用程序中促进稳定和可扩展的架构。

IronPDF 的 $799 轻量版包包括一个非常强大的许可证、重新设计选项和更长时间的编程支持。 客户可以在水印测试期间在实际应用环境中测试该产品。 了解更多关于 IronPDF 许可证 的信息,以了解其优势、审批流程和草拟形式。 查看 Iron Software 网站了解更多信息。

常见问题解答

C# 中的 internal 关键字如何增强封装?

C# 中的 internal 关键字通过将类型或成员的可见性限制在同一程序集内,从而阻止外部程序集访问内部实现细节。这促进了代码库的更清洁架构和可维护性。

InternalsVisibleTo 属性在 C# 中的作用是什么?

C# 中的 InternalsVisibleTo 属性允许您向指定的外部程序集授予对程序集的内部成员的访问权限。这在测试时特别有用,因为它允许测试程序集访问内部成员进行验证,同时在发布期间保持封装。

可以在 C# 中使用 internal 访问修饰符进行 PDF 处理吗?

是的,internal 访问修饰符可以与诸如 IronPDF 之类的库结合使用,将 PDF 处理逻辑封装在一个程序集内。这确保了敏感的 PDF 操作功能不对外部暴露,增强了安全性和可维护性。

C# 中 internal 关键字的一些常见用例是什么?

C# 中 internal 关键字的常见用例包括限制对内部类、方法和属性的访问,尤其是在构建模块化组件如图形用户界面时,或在使用 IronPDF 等库封装业务逻辑以进行 PDF 文档管理时。

如何使用 C# 将 HTML 转换为 PDF?

您可以通过使用 IronPDF 来使用 C# 将 HTML 转换为 PDF。该库提供诸如 RenderHtmlAsPdf 的方法将 HTML 字符串转换为 PDF 文档,还有 RenderHtmlFileAsPdf 直接转换 HTML 文件。

在库开发中使用 internal 访问修饰符的好处是什么?

在库开发中使用 internal 访问修饰符提供的好处包括通过将敏感的实现细节隐藏在外部程序集之外来增强安全性,并通过将复杂的逻辑封装在库中并仅公开必要的接口来提高可维护性。

在 PDF 处理过程中如何利用 IronPDF 进行文档安全?

IronPDF 可以在 PDF 处理过程中通过应用密码保护、加密和访问控制等功能来增强文档安全性,确保只有授权用户才能查看或修改在安全环境下生成或操作的 PDF 文档。

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。