.NET 幫助

C# 保護 (開發人員如何使用)

Chipego
奇佩戈·卡林达
2024年1月4日
分享:

C# 是一種現代的、物件導向的、類型安全的程式語言,由微軟開發。 廣為人知以其多功能性,C# 用於各種應用程式,從桌面軟體到使用 Unity 的遊戲開發。 有效的 C# 程式設計的基石之一是理解存取修飾符,它決定了類成員在類內和類外的存取方式。

C# 中的存取修飾符是用於成員宣告中的關鍵字,用來控制它們在程式碼其他部分的可存取性。 最常用的存取修飾符是publicprivateprotected,每一個都在保障資料完整性和實作物件導向程式設計中的封裝原則方面具有獨特的作用。

對於初學者來說,掌握存取修飾符的概念,特別是protected在 C# 編程中,很重要。 這些修飾符不僅有助於定義類的對外介面,還在繼承中起著重要作用——這是物件導向程式設計中的一個基本概念。 理解 protected 如何與其他修飾符(如 private protectedprotected internal)配合使用,是構建穩健且可維護的 C# 應用程式的關鍵。

存取修飾符的基本知識

什麼是存取修飾符?

在 C# 中,存取修飾符是設定類別成員(如方法、屬性和變數)及類型的可訪問性級別的關鍵字。這些修飾符控制類別成員的訪問地點和方式,在物件導向程式設計中的封裝實現中發揮關鍵作用。

不同存取修飾子的概覽

C# 提供了幾種訪問修飾符,每種都是針對特定情況設計的:

  • 公共存取修飾符public 修飾符允許從相同專案中的任何其他程式碼或引用它的其他專案中存取類別成員。 這是限制最少的修飾符。
  • 私有存取修飾詞:相反地,private 修飾詞限制類別成員僅能在同一類別內存取。 它是最具限制性的修飾符,對於隱藏物件的內部狀態至關重要。
  • 受保護的存取修飾符protected 存取修飾符使類別成員能夠在其類別及任何衍生類別中存取。 這在繼承情境中特別有用。
  • Internal 取用修飾符:具有 internal 修飾符的成員可以在同一個程式集內存取,但無法從其他程式集存取。

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

了解受保護的修飾符

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

C# 中的 protected 修飾詞是物件導向程式設計中的一個基本概念。 這允許一個類別成員在其類別內以及衍生自該類別的其他類別中被訪問。 當您想要在允許擴展功能的同時保持成員對程序其他部分隱藏時,這種級別的可訪問性是必不可少的。

同類與衍生類別內的可及性

受保護的成員在繼承中扮演著重要角色。 它們可以在宣告它們的相同類別中存取,也可以在從包含類別衍生的其他類別中存取。 這意味著,如果您有一個具有受保護成員的基類,任何繼承自這個基類的類都可以存取這個成員。 然而,它對於不屬於此繼承鏈的任何其他類別仍然是不可訪問的。

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

行動中的保護範例

public class Vehicle
{
    protected void StartEngine()
    {
        // Engine start logic
    }
}
public class Car : Vehicle
{
    public void Drive()
    {
        StartEngine(); // Accessing the protected method
        // Additional driving logic
    }
}
public class Vehicle
{
    protected void StartEngine()
    {
        // Engine start logic
    }
}
public class Car : Vehicle
{
    public void Drive()
    {
        StartEngine(); // Accessing the protected method
        // Additional driving logic
    }
}
Public Class Vehicle
	Protected Sub StartEngine()
		' Engine start logic
	End Sub
End Class
Public Class Car
	Inherits Vehicle

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

在此範例中,從父類別Vehicle派生的Car類別可以存取StartEngine方法,而未從Vehicle繼承的其他類別則無法存取此方法。 這展示了protected修飾符如何幫助分層組織和保護類功能。

受保內部及私有受保

理解 C# 中的保護內部

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

受保護的內部使用案例

受保護的內部特別有用,當您想將某些類成員暴露給同一個程序集中的其他類時,同時也允許在不同程序集中的派生類訪問這些成員。 此修飾符通常用於大型專案和庫中,需要對應用程式不同部分的成員可訪問性進行更精細的控制。

專屬受保護:在組件內的限制性存取

另一方面,private protected 修飾符更加嚴格。private protected 成員只能在其包含的類別內部或位於相同組件的衍生類別中被訪問。 它結合了privateprotected,用於嚴格限制成員在同一個程序集內的訪問。

實際範例:Protected Internal 與 Private Protected

public class BaseClass
{
    protected internal string ProtectedInternalMethod()
    {
        // Method logic
    }
    private protected string PrivateProtectedMethod()
    {
        // Method logic
    }
}
public class DerivedClass : BaseClass
{
    void AccessMethods()
    {
        ProtectedInternalMethod(); // Accessible
        PrivateProtectedMethod(); // Accessible only if DerivedClass is in the same assembly
    }
}
public class BaseClass
{
    protected internal string ProtectedInternalMethod()
    {
        // Method logic
    }
    private protected string PrivateProtectedMethod()
    {
        // Method logic
    }
}
public class DerivedClass : BaseClass
{
    void AccessMethods()
    {
        ProtectedInternalMethod(); // Accessible
        PrivateProtectedMethod(); // Accessible only if DerivedClass is in the same assembly
    }
}
Public Class BaseClass
	Protected Friend Function ProtectedInternalMethod() As String
		' Method logic
	End Function
	Private Protected Function PrivateProtectedMethod() As String
		' Method logic
	End Function
End Class
Public Class DerivedClass
	Inherits BaseClass

	Private Sub AccessMethods()
		ProtectedInternalMethod() ' Accessible
		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,同時保留佈局和樣式。 它特別適合從基於網絡的內容(如報告、發票和文檔)生成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

以下是使用 IronPDF 從 HTML 字串創建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");
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中的Protected角色

在像 IronPDF 這樣的函式庫中,protected 存取修飾符在程式碼結構中扮演著重要的角色。 它允許IronPDF的開發人員控制其他開發人員如何與該庫互動。 例如,他們可能會在基礎類中使用受保護的方法或屬性,以允許在派生類中進行擴展和自訂,而不將內部邏輯暴露給公共 API。

結論

在本教程中,我們探討了 C# 中 protected 訪問修飾符的複雜性,這是物件導向程式設計的基本方面。 我們首先從了解訪問修飾符的基本概念以及它們在定義類別成員範圍和可訪問性中的作用開始。 我們深入探討了protectedprotected internalprivate protected的特點,它們在類成員訪問控制領域中各自扮演著獨特的角色。

IronPDF 提供了IronPDF 的免費試用版,讓開發者探索其功能,輕鬆嘗試並實際體驗其優勢。 要繼續使用並訪問所有功能,查看 IronPDF 授權選項,提供全面的解決方案以滿足您在 C# 中對 PDF 操作的需求。

Chipego
奇佩戈·卡林达
軟體工程師
Chipego 擁有天生的傾聽技能,這幫助他理解客戶問題,並提供智能解決方案。他在獲得信息技術理學學士學位後,于 2023 年加入 Iron Software 團隊。IronPDF 和 IronOCR 是 Chipego 專注的兩個產品,但隨著他每天找到新的方法來支持客戶,他對所有產品的了解也在不斷增長。他喜歡在 Iron Software 的協作生活,公司內的團隊成員從各自不同的經歷中共同努力,創造出有效的創新解決方案。當 Chipego 離開辦公桌時,他常常享受讀好書或踢足球的樂趣。
< 上一頁
C# 案例陳述句(如何為開發人員運作)
下一個 >
.NET Aspire(它如何為開發者工作)