跳至页脚内容
.NET 帮助

C# 受保护(开发者如何使用)

C#是微软开发的一种现代、面向对象和类型安全的编程语言。 C#因其多功能性而广受认可,被用于从桌面软件到与Unity一起进行游戏开发的各种应用程序中。 有效C#编程的基石之一是理解访问修饰符,它决定了类成员在类内和类外的访问方式。

C#中的访问修饰符是在成员声明中用于控制它们从代码的其他部分访问的关键字。 最常用的访问修饰符是publicprivateprotected,每个都有其独特的作用,维护面向对象编程的数据完整性和封装原则。

对于初学者来说,掌握访问修饰符的概念,尤其是protected在C#编程中的应用是重要的。 这些修饰符不仅有助于定义类与外部世界的接口,而且在继承中起着重要作用,这是面向对象编程的一个基本概念。 了解protected如何与其他修饰符如private protectedprotected internal协同工作,是构建健壮且可维护的C#应用程序的关键。

访问修饰符基础知识

什么是访问修饰符?

C#中的访问修饰符是设置类成员(如方法、属性和变量)和类型的可访问级别的关键字。这些修饰符控制类成员的访问位置和方式,在实现面向对象编程中的封装时发挥着关键作用。

不同访问修饰符的概述

C#提供了多种访问修饰符,每个都为特定场景设计:

  • 公共访问修饰符public修饰符允许从同一项目或引用它的另一个项目中的任何其他代码访问类成员。 它是最不具限制性的修饰符。
  • 私有访问修饰符:相反,private修饰符仅限于在同一类中访问类成员。 它是最具限制性的修饰符,对于隐藏对象的内部状态至关重要。
  • 受保护访问修饰符protected访问修饰符使类成员在其类和任何派生类中可访问。 这在继承场景中特别有用。
  • 内部访问修饰符:具有internal修饰符的成员在同一程序集内可访问,但不能从其他程序集访问。

理解这些基本访问修饰符为C#中的更复杂概念奠定了基础,如继承和多态性,在这些方面控制类的访问变得至关重要。

理解受保护修饰符

受保护访问修饰符在C#中的角色

C#中的protected修饰符是面向对象编程中的一个基本概念。 它允许一个类成员在其类内部以及从它派生的类中可访问。 这种级别的可访问性在您希望提供扩展功能的同时保持成员从程序的其他部分隐藏时至关重要。

同类和派生类中的可访问性

受保护的成员在继承中起着重要作用。 它们在声明它们的同一个类以及从包含类派生的其他类中可访问。 这意味着如果您有一个带有受保护成员的基类,该成员可以被从此基类继承的任何类访问。 然而,它对不属于此继承链的任何其他类仍然不可访问。

例如,考虑一个Vehicle类,它具有一个受保护的方法StartEngine()。 此方法可以从扩展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#中的受保护内部

C#中的protected internal访问修饰符是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的能力,同时保持布局和样式。 这对于从基于Web的内容(如报告、发票和文档)生成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中的角色

在像IronPDF这样的库中,protected访问修饰符在结构代码方面起着重要作用。 它允许IronPDF的开发人员控制其他开发人员如何与库交互。 例如,他们可能在基类中使用protected方法或属性,以允许在派生类中进行扩展和自定义,而不需要向公共API公开内部逻辑。

结论

在本教程中,我们探讨了C#中protected访问修饰符的复杂细节,这是面向对象编程的一个基本方面。 我们从理解访问修饰符的基础知识及其在定义类成员的作用和可访问性方面的作用开始。 我们深入讨论了protectedprotected internalprivate protected的具体特性,它们在类成员访问控制的领域中有效地发挥着独特的作用。

IronPDF为开发人员提供了IronPDF的免费试用,让他们轻松探索其功能,亲自体验其优势。 要继续使用和访问所有功能,请查看关于IronPDF的许可选项,为您的C#中的PDF操作需求提供全面解决方案。

常见问题解答

如何在 C# 中使用 protected 访问修饰符进行类继承?

在 C# 中,protected 访问修饰符允许您定义类成员,这些成员可在其自身类和任何派生类中访问。这对于继承至关重要,因为它允许派生类使用和重写基类的方法或属性,同时将它们隐藏在外部类之外。

protected internal 访问修饰符在 C# 中的重要性是什么?

C# 中的 protected internal 访问修饰符提供了在同一程序集内和来自程序集外派生类的类成员访问。此双重可访问性在需要跨不同项目扩展类时仍保持一定程度的封装时很有用。

private protected 访问修饰符与 protected internal 在 C# 中有何不同?

private protected 访问修饰符将类成员的访问限制为仅限于同一程序集内的派生类,结合了 private 和 protected 的特性。与此相比,protected internal 允许从同一程序集中的任何类以及其他程序集中的派生类进行访问。

为什么访问修饰符在 C# 编程中至关重要?

C# 中的访问修饰符至关重要,因为它们控制类成员的可见性和可访问性,有助于维护数据完整性和封装。它们允许开发人员管理代码不同部分的交互,这对于构建健壮且可维护的应用程序至关重要。

了解访问修饰符如何增强 C# 中的库开发?

了解访问修饰符对于 C# 中的库开发至关重要,它们使开发人员能够控制类成员的可见性,确保内部逻辑受到保护,同时仍允许其他开发人员扩展和自定义库功能。

你能解释 IronPDF 如何利用 C# 访问修饰符吗?

IronPDF 使用 C# 访问修饰符来构建其库代码,确保内部方法不受外部访问的影响,同时允许开发人员扩展其功能。这种方法可以在保持封装的同时创建健壮的 PDF 操作解决方案。

访问修饰符如何支持 C# 中的面向对象编程原则?

C# 中的访问修饰符通过管理类成员的可访问性来支持面向对象的编程原则,这对于封装至关重要。它们使开发人员能够隐藏实现细节仅公开必要的部分,从而促进干净且模块化的代码。

protected 关键字在 C# 中的实际应用是什么?

C# 中的 protected 关键字主要用于继承场景,允许派生类访问和使用基类成员。这在实现相关类的共享功能而不向不相关类公开这些成员时特别有用。

Curtis Chau
技术作家

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

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