.NET Tips and Tricks

Blog archive

The C# Scopes for Privileged Inheritance

You can't really combine the various scopes that you can apply to a C# member because, I suspect, they wouldn't make sense (what's the scope of a public private method, for example?). However, you can combine internal with private and protected like this:

public class CustomerBase
{
  protected internal void DeleteCustomer() {

or

public class CustomerBase
{
  private protected void DeleteCustomer() {

In my first example, because of its internal scope, DeleteCustomer can be used by code that instantiates CustomerBase but only if that code is in the same project as CustomerBase. Because of the protected declaration, however, code in other projects can access DeleteCustomer through a class that inherits from CustomerBase.

Code in other projects that instantiate CustomerBase directly won't see DeleteCustomer. Essentially, code in the same project as CustomerBase has a privilege denied to code in other projects (the ability to delete customers, in this case).

The scope private protected goes even further and is probably more useful. This scope prevents DeleteCustomer from being accessed except through classes that derive from CustomerBase and only if those derived classes are in the same project as CustomerBase.

Code in some other project in a class that inherits from CustomerBase won't be able to access DeleteCustomer. This allows you to create derived classes in the same project as CustomerBase that have privileges denied to classes in other projects that inherit from CustomerBase.

Posted by Peter Vogel on 02/21/2018


comments powered by Disqus

Featured

  • Compare New GitHub Copilot Free Plan for Visual Studio/VS Code to Paid Plans

    The free plan restricts the number of completions, chat requests and access to AI models, being suitable for occasional users and small projects.

  • Diving Deep into .NET MAUI

    Ever since someone figured out that fiddling bits results in source code, developers have sought one codebase for all types of apps on all platforms, with Microsoft's latest attempt to further that effort being .NET MAUI.

  • Copilot AI Boosts Abound in New VS Code v1.96

    Microsoft improved on its new "Copilot Edit" functionality in the latest release of Visual Studio Code, v1.96, its open-source based code editor that has become the most popular in the world according to many surveys.

  • AdaBoost Regression Using C#

    Dr. James McCaffrey from Microsoft Research presents a complete end-to-end demonstration of the AdaBoost.R2 algorithm for regression problems (where the goal is to predict a single numeric value). The implementation follows the original source research paper closely, so you can use it as a guide for customization for specific scenarios.

  • Versioning and Documenting ASP.NET Core Services

    Building an API with ASP.NET Core is only half the job. If your API is going to live more than one release cycle, you're going to need to version it. If you have other people building clients for it, you're going to need to document it.

Subscribe on YouTube