跳至頁尾內容
.NET幫助

C# 內部 (對開發者如何運作)

在 C# 組件化開發程式語言中,存取修飾符非常重要,尤其是在管理靜態 void 主程式內表單類別、方法和屬性的可見性時。 當建立模組化且可維護的圖形使用者介面時,internal 是一個相當相關的存取修飾符。 這篇文章將討論 C# internal的概念,以及 IronPDF 的一些有用應用,它是一個靈活的 C# 框架,用於管理 PDF 文件。

如何在 C# 組件化開發中使用 internal 成員

  1. 建立一個 C# 專案。
  2. 了解 internal 存取修飾符。
  3. 對成員應用 'internal'。
  4. 在組件層級組織程式碼。
  5. 在相同組件內使用 internal 成員。
  6. 編譯程式碼。

了解 Internal 存取修飾符

C# 中的 internal 關鍵字/存取修飾符將型別或成員的可見性限制為相同組件內的其他成員。 這意味着任何被標記為 internal 的類別、無論是衍生類別、方法,還是屬性,都可以被同一個組件內的其他型別存取,但無法向組件外部的型別提供存取。 這種存取控制的程度對於封裝來說是必不可少的,因為它讓您可以指定應該以私有方式僅在同一組件內使用的實現細節。

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

Internal 類別

using 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

Internal 類別成員

通過應用 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 介面

宣告一個介面,它只能在同一組件內通過 internal 存取修飾符進行存取。

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

Internal 巢狀類別

using 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 組件

通過在組件層級應用 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 屬性將 internal 存取修飾符對指定的外部組件開放。

// 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 被指定為 internal 成員,因此它只能在 Assembly A 中被存取。 如果您嘗試從 Assembly B 存取此功能,將會出現編譯錯誤。

結合 protected 和 internal 存取修飾符會變成 protected internal 存取修飾符。 由於受保護的 internal 複合存取修飾符,成員(方法、屬性或欄位)或型別(類別、介面或委派)可以被衍生型別在其組件內部和外部存取。 由 protected 和 internal 存取水平分別給予的可見性提供了一種平衡。

IronPDF

using C# 程式語言,IronPDF 官方網站 是一個 .NET 程式庫,使開發者能夠生成、編輯和修改 PDF 文件。 它提供了一系列工具和功能,以多種方式與 PDF 文件互動,包括從 HTML 建立 PDF,將 HTML 轉換為 PDF,合併或分割 PDF 文件,以及向已存在的 PDF 新增註釋、文字和圖片。

安裝IronPDF

獲取 IronPDF 程式庫; 它是未來補丁所需的。 在 Package Manager Console 中輸入下列命令以完成此操作:

Install-Package IronPdf

C# Internal(開發者運作方式):圖1 - 安裝 IronPDF using NuGet Package Manager 搜尋套件 "IronPDF" 是另一個選擇。我們可以從此 IronPDF 相關的所有 NuGet 套件列表中選擇並下載所需的套件。

C# Internal(開發者運作方式):圖2 - IronPDF 套件

IronPDF在HTML到PDF轉換方面表現出色,確保精確保留原始設計和樣式。 它非常適合從基於網路的內容如報告、發票和文件中建立PDF。 IronPDF支持HTML文件、URLs和原始HTML字串,輕鬆生成高品質的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 表單。
  • 安全功能: PDF 文件可以使用 IronPDF 設置密碼和權限保護和加密。
  • 文字提取: 可以使用 IronPDF 從 PDF 文件中提取文字。

使用 IronPDF 封裝 PDF 處理

IronPDF 提供了一系列功能,用於生成、修改和處理 PDF 文件。 通過將 PDF 處理程式碼封裝在 internal 類別或方法內,可以將實現細節保持在組件邊界後面。 想要了解更多關於 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 相關的程式碼封裝在 internal 類別或方法中,您可以在抽象、安全性和可用性之間取得妥協。 當處理像 IronPDF 這樣管理關鍵功能(例如 PDF 文件處理)的程式庫時,特別重要的是要接受封裝和有限存取的概念,以促進您的 C# 應用程式中穩定且可擴展的架構。

IronPDF 的 $999 輕量包中包含了一個非常強大的授權、重新設計選項和更長的程式支持期限。 客戶可以在有浮水印的測試期間在實際應用環境中測試該產品。 了解更多關於 IronPDF 授權的資訊,以了解優勢、審批過程和草案形式。 瀏覽 Iron Software 網站 以了解更多資訊。

常見問題

C#中的內部關鍵字如何增強封裝?

C#中的內部關鍵字通過將型別或成員的可見性限制在同一程式集中來增強封裝,從而防止外部程式集存取內部實現細節。這促進了程式碼庫的更清晰架構和可維護性。

InternalsVisibleTo屬性在C#中的作用是什麼?

C#中的InternalsVisibleTo屬性允許您向指定的外部程式集授予對程式集內部成員的存取權限。這對於測試特別有用,因為它允許測試程式集在部署過程中驗證內部成員的同時保持封裝。

內部存取修飾符可以用於C#中的PDF處理嗎?

可以,內部存取修飾符可以與像IronPDF這樣的程式庫結合使用,以便在程式集中封裝PDF處理邏輯。這確保了敏感的PDF處理功能不會對外部開放,增強了安全性和可維護性。

C#中內部關鍵字的一些常見用例是什麼?

C#中內部關鍵字的常見用例包括限制對內部類、方法和屬性以及構建模塊組件(如圖形使用者介面)或封裝業務邏輯(如IronPDF等程式庫的PDF文件管理)時的存取。

如何使用C#將HTML轉換為PDF?

您可以使用IronPDF將C#中的HTML轉換為PDF。該程式庫提供如RenderHtmlAsPdf的方法將HTML字串轉換為PDF文件,還有RenderHtmlFileAsPdf以直接轉換HTML文件。

在程式庫開發中使用內部存取修飾符有哪些好處?

程式庫開發中使用內部存取修飾符可以提供增強的安全性,通過將敏感的實現細節隱藏在外部程式集之外,並通過封裝複雜的邏輯在程式庫內部來提高可維護性,同時只公開所需的接口。

如何利用IronPDF在PDF處理過程中進行文件安全性?

IronPDF可通過應用密碼保護、加密和存取控制等功能確保PDF文件在安全環境中生成或處理時,只有授權使用者可以查看或修改。

Jacob Mellor,首席技術官 @ Team Iron
首席技術官

Jacob Mellor是Iron Software的首席技術官,一位在C# PDF技術上開創先河的遠見工程師。作為Iron Software核心程式碼庫的原開發者,他從創立以來就一直在塑造公司的產品架構,與首席執行官Cameron Rimington一起將公司轉變為服務於NASA、特斯拉和全球政府公司的50多名人員的公司。

Jacob擁有曼徹斯特大學的土木工程一等榮譽學士學位(BEng),於1998-2001年之間獲得。在1999年於倫敦創辦他的第一家軟體公司並於2005年建立了他的第一批.NET元組件後,他專注於解決Microsoft生態系統中的複雜問題。

他的旗艦IronPDF和Iron Suite .NET程式庫在全球獲得了超過3000萬次NuGet安裝依據,他的基礎程式碼基繼續支援著世界各地開發者使用的工具。擁有25年的商業經驗和41年的程式設計專業知識,他仍專注於推動企業級C#、Java和Python PDF技術的創新,同時指導下一代技術領導者。

Iron 支援團隊

我們線上24小時,每週5天。
聊天
電子郵件
給我打電話