跳過到頁腳內容
.NET幫助

C# 保護(開發者的工作原理)

C# 是由微軟開發的現代、物件導向和類型安全的程式語言。 C# 因其多功能而廣受認可,被用於從桌面軟體到使用 Unity 的遊戲開發等各種應用中。 有效進行 C# 程式設計的基石之一是理解存取修飾詞,它們決定類別成員在類別內外的存取方式。

C# 中的存取修飾詞是用在成員宣告中的關鍵字,控制它們從程式碼的其他部分的存取權限。 最常用的存取修飾詞是publicprivateprotected,每個修飾詞在保障物件導向程式設計的資料完整性和封裝原則中具不同的作用。

對初學者來說,理解存取修飾詞的概念,特別是protected在 C# 程式設計中的應用,是重要的。 這些修飾詞不僅有助於定義類別與外界的介面,還在繼承中扮演著重要的角色,而繼承是物件導向程式設計中的基本概念。 理解protected如何與其他修飾詞如private protectedprotected internal一起運作是建立健全且可維護的 C# 應用程式的關鍵。

存取修飾詞的基礎

什麼是存取修飾詞?

C# 中的存取修飾詞是設置類別成員(如方法、屬性和變數)及類型的存取級別的關鍵字。這些修飾詞控制類別成員的存取位置和方式,對實施物件導向程式設計中的封裝起著關鍵作用。

不同存取修飾詞的概述

C# 提供多個存取修飾詞,各自針對特定情境設計:

  • 公開存取修飾詞public修飾詞允許從同一專案中的任何其他程式碼或引用它的另一專案中存取類別成員。 它是限制最少的修飾詞。
  • 私有存取修飾詞:相反地,private修飾詞僅限於在同一類別內存取類別成員。 它是限制最多的修飾詞,對隱藏物件的內部狀態至關重要。
  • 保護存取修飾詞protected存取修飾詞使類別成員可以在其類別和任何衍生類別中存取。 這在繼承場景中特別有用。
  • 內部存取修飾詞:具有internal修飾詞的成員可以在同一個組件內存取,但不能從其他組件存取。

理解這些基本存取修飾詞為在 C# 中的更復雜概念(如繼承和多型)奠定基礎,這些概念中控制類別的存取變得至關重要。

理解保護修飾詞

保護存取修飾詞在 C# 中的角色

protected修飾詞在 C# 中是物件導向程式設計的基本概念。 它允許類別成員在其類別內及其衍生類別中存取。 當你希望允許擴展功能,同時將成員隱藏於程式的其他部分時,這種存取級別是必不可少的。

同類及衍生類中的存取權限

保護成員在繼承中扮演重要角色。 它們在宣告類別及從包含類別衍生的其他類別中可以存取。 這意味著如果你有一個基礎類別具有一個保護成員,該成員可以被任何繼承自此基礎類別的類別存取。 然而,它對不是這個繼承鏈的一部分的任何其他類別依然不可存取。

例如,考慮一個具有保護方法StartEngine()Vehicle類別。 此方法可以從任何擴展Vehicle的類別中調用,如CarTruck類別,這使這些衍生類可以利用公共邏輯同時保持封裝。

保護實例中的範例

public class Vehicle
{
    // A protected method accessible by any derived class
    protected void StartEngine()
    {
        // Engine start logic
    }
}

public class Car : Vehicle
{
    public void Drive()
    {
        // Accessing the protected method from the base class
        StartEngine();
        // Additional driving logic
    }
}
public class Vehicle
{
    // A protected method accessible by any derived class
    protected void StartEngine()
    {
        // Engine start logic
    }
}

public class Car : Vehicle
{
    public void Drive()
    {
        // Accessing the protected method from the base class
        StartEngine();
        // Additional driving logic
    }
}
Public Class Vehicle
	' A protected method accessible by any derived class
	Protected Sub StartEngine()
		' Engine start logic
	End Sub
End Class

Public Class Car
	Inherits Vehicle

	Public Sub Drive()
		' Accessing the protected method from the base class
		StartEngine()
		' Additional driving logic
	End Sub
End Class
$vbLabelText   $csharpLabel

在此範例中,從父類別Vehicle派生的Car類別可以存取StartEngine方法,而非繼承自Vehicle的其他類別則無法存取此方法。 這展示了保護修飾詞如何幫助有條理地和分層地保護類別功能。

保護內部和私有保護

理解 C# 中的保護內部

protected internal在 C# 中是protectedinternal的組合。 這意味著標記為protected internal的類別成員可以從同一組件中的任何類別以及來自其他組件的衍生類別中存取。 相比於僅限於包含類別及其衍生類型的protected修飾詞,它提供更廣泛的存取範圍。

保護內部的使用案例

當你希望將某些類別成員公開到同一組件中的其他類別,並允許在不同組件中的衍生類別存取這些成員時,保護內部特別有用。 此修飾詞常用於需要對各個應用程式部分的成員存取進行更細控制的大型專案和庫中。

私有保護:組件內的限制性存取

另一方面,private protected修飾詞更具限制性。private protected成員僅能在其包含類別或位於相同組件中的衍生類別中存取。 它是privateprotected的組合,旨在嚴格限制成員的存取至同一組件內。

實際範例:保護內部與私有保護

public class BaseClass
{
    // Method accessible in the same assembly and by derived classes from other assemblies
    protected internal string ProtectedInternalMethod()
    {
        // Method logic
        return "Protected Internal Access";
    }

    // Method accessible only within the same assembly, by derived classes
    private protected string PrivateProtectedMethod()
    {
        // Method logic
        return "Private Protected Access";
    }
}

public class DerivedClass : BaseClass
{
    void AccessMethods()
    {
        // Both methods are accessible if in the same assembly
        string result1 = ProtectedInternalMethod();
        string result2 = PrivateProtectedMethod(); // Accessible only if DerivedClass is in the same assembly
    }
}
public class BaseClass
{
    // Method accessible in the same assembly and by derived classes from other assemblies
    protected internal string ProtectedInternalMethod()
    {
        // Method logic
        return "Protected Internal Access";
    }

    // Method accessible only within the same assembly, by derived classes
    private protected string PrivateProtectedMethod()
    {
        // Method logic
        return "Private Protected Access";
    }
}

public class DerivedClass : BaseClass
{
    void AccessMethods()
    {
        // Both methods are accessible if in the same assembly
        string result1 = ProtectedInternalMethod();
        string result2 = PrivateProtectedMethod(); // Accessible only if DerivedClass is in the same assembly
    }
}
Public Class BaseClass
	' Method accessible in the same assembly and by derived classes from other assemblies
	Protected Friend Function ProtectedInternalMethod() As String
		' Method logic
		Return "Protected Internal Access"
	End Function

	' Method accessible only within the same assembly, by derived classes
	Private Protected Function PrivateProtectedMethod() As String
		' Method logic
		Return "Private Protected Access"
	End Function
End Class

Public Class DerivedClass
	Inherits BaseClass

	Private Sub AccessMethods()
		' Both methods are accessible if in the same assembly
		Dim result1 As String = ProtectedInternalMethod()
		Dim result2 As String = PrivateProtectedMethod() ' Accessible only if DerivedClass is in the same assembly
	End Sub
End Class
$vbLabelText   $csharpLabel

在此示例中,DerivedClass可以存取ProtectedInternalMethodPrivateProtectedMethod。 然而,如果DerivedClass位於不同的組件中,它將無法存取PrivateProtectedMethod

IronPDF:C# PDF 庫

C# Protected(對開發人員的運作方式):圖1 - IronPDF for .NET 網頁

IronPDF 介紹

探索 IronPDF 特性 是一個流行的 C# 庫,用於創建、編輯和匯出 PDF 文件。 它是一個強大的工具,展示了 C# 的實用應用,如類別、物件及存取修飾詞的概念。 理解存取修飾詞如protected功能在處理像 IronPDF 這樣的複雜庫時至關重要。

IronPDF 的亮點在於其能有效地將HTML 轉換為 PDF,同時保留佈局和樣式。 它在從基於網頁的內容生成報告、發票和文件時特別有用。 HTML 文件、URL 和 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

以下是由 HTML 字串創建 PDF 文件的 IronPDF 範例:

using IronPdf;

// Instantiate Renderer
var renderer = new ChromePdfRenderer();

// Create a PDF from an HTML string using C#
var pdf = renderer.RenderHtmlAsPdf("<h1>C# Generate PDF Document using IronPDF!</h1>");

// Export to a file or Stream
pdf.SaveAs("HtmlToPdf.pdf");
using IronPdf;

// Instantiate Renderer
var renderer = new ChromePdfRenderer();

// Create a PDF from an HTML string using C#
var pdf = renderer.RenderHtmlAsPdf("<h1>C# Generate PDF Document using IronPDF!</h1>");

// Export to a file or Stream
pdf.SaveAs("HtmlToPdf.pdf");
Imports IronPdf

' Instantiate Renderer
Private renderer = New ChromePdfRenderer()

' Create a PDF from an HTML string using C#
Private pdf = renderer.RenderHtmlAsPdf("<h1>C# Generate PDF Document using IronPDF!</h1>")

' Export to a file or Stream
pdf.SaveAs("HtmlToPdf.pdf")
$vbLabelText   $csharpLabel

這是生成的PDF文件:

C# Protected(對開發人員的運作方式):圖2 - 上述代碼的輸出 PDF

保護在 IronPDF 中的作用

在像 IronPDF 這樣的庫中,protected 存取修飾詞在結構代碼中扮演著重要角色。 它允許 IronPDF 的開發者控制其他開發者與庫的互動方式。 例如,他們可能在基礎類中使用protected 方法或屬性,以允許在衍生類中進行擴展和自定義,而不對公共 API 透露內部邏輯。

結論

在本教程中,我們探討了 C# 中protected存取修飾詞的複雜性,這是物件導向程式設計的一個基本方面。 我們首先了解了存取修飾詞的基礎以及它們在定義類別成員作用域和存取權限中的作用。 我們深入探討了protectedprotected internalprivate protected的特殊性,各自在類別成員存取控制領域中發揮獨特作用。

IronPDF 為開發者提供IronPDF 免費試用以探尋其功能,讓人們容易實驗並見證其實際效益。 為繼續使用並存取所有特性,請查看 IronPDF 許可選項,這為您的 C# PDF 操作需求提供全方位解決方案。

常見問題解答

我如何在 C# 中使用 protected 訪問修飾符進行類的繼承?

在 C# 中,protected 訪問修飾符允許您定義在其自身類和任何派生類中可訪問的類成員。這對於繼承是必不可少的,因為它使派生類可以使用和重寫基類的方法或屬性,同時對外部類保持隱藏。

在 C# 中,protected internal 訪問修飾符的重要性是什麼?

在 C# 中,protected internal 訪問修飾符允許在同一程序集內和跨程序集的派生類訪問類成員。當您需要在不同專案中擴展類同時保持一定程度的封裝時,這種雙重可訪問性非常有用。

在 C# 中,private protected 訪問修飾符如何與 protected internal 不同?

private protected 訪問修飾符將類成員的訪問限制在同一程序集內的派生類,結合了 private 和 protected 的特性。這與 protected internal 相反,後者允許同一程序集中的任何類以及其他程序集的派生類訪問。

為什麼訪問修飾符在 C# 編程中至關重要?

C# 中的訪問修飾符至關重要,因為它們控制類成員的可見性和可訪問性,有助於保持數據完整性和封裝。它們允許開發人員管理代碼不同部分之間的互動,這對於構建健壯且可維護的應用程序至關重要。

理解訪問修飾符如何提高 C# 中的庫開發?

理解訪問修飾符對於 C# 中的庫開發非常重要,因為它們使開發人員能夠控制類成員的可見性,確保內部邏輯受到保護,同時允許其他開發人員擴展和定制庫功能。

您能解釋下 IronPDF 如何利用 C# 訪問修飾符嗎?

IronPDF 使用 C# 訪問修飾符來結構其庫代碼,確保內部方法免受外部訪問,同時允許開發人員擴展其功能。這種方法使創建健壯的 PDF 操作解決方案成為可能,同時保持封裝。

訪問修飾符如何支持 C# 中的面向對象編程原則?

C# 中的訪問修飾符通過管理類成員的可訪問性來支持面向對象編程原則,這對於封裝至關重要。它們讓開發人員能夠隱藏實現細節,只暴露必要的部分,從而促進清晰且模組化的代碼。

C# 中 protected 關鍵字的實用應用是什麼?

C# 中的 protected 關鍵字主要用於繼承場景,允許派生類訪問和使用基類成員。這對於在相關類之間實施共享功能非常有用,而不會將這些成員暴露給不相關的類。

Curtis Chau
技術作家

Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。

除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。