> ## Documentation Index
> Fetch the complete documentation index at: https://docs.syntblaze.com/llms.txt
> Use this file to discover all available pages before exploring further.

# C# Private Protected Property

A `private protected` property in C# is a class member whose access is restricted to the containing class and types derived from that containing class, strictly provided that those derived types reside within the same assembly. It represents the logical intersection of `internal` and `protected` accessibility modifiers.

At the Common Language Runtime (CLR) level, this access modifier maps to the `FamilyAndAssembly` visibility attribute.

## Access Rules

The C# compiler enforces the following strict resolution rules for a `private protected` property:

* **Same Assembly + Derived Class:** Accessible.
* **Same Assembly + Non-Derived Class:** Inaccessible.
* **Different Assembly + Derived Class:** Inaccessible.
* **Different Assembly + Non-Derived Class:** Inaccessible.

This contrasts directly with `protected internal` (CLR `FamilyOrAssembly`), which acts as a logical union, granting access to derived classes *regardless* of their assembly, or any class within the same assembly.

## Syntax and Visualization

```csharp theme={"dark"}
// --- Assembly A 
public class BaseClass
{
    // Declaration of a private protected property
    private protected int InternalState { get; set; }
}

public class DerivedInSameAssembly : BaseClass
{
    public void MutateState()
    {
        // VALID: Type is derived from BaseClass AND resides in Assembly A
        this.InternalState = 42; 
    }
}

public class NonDerivedInSameAssembly
{
    public void AttemptMutation(BaseClass instance)
    {
        // COMPILER ERROR CS0122: 'BaseClass.InternalState' is inaccessible 
        // due to its protection level. (Not a derived class).
        // instance.InternalState = 42; 
    }
}
```

```csharp theme={"dark"}
// --- Assembly B (References Assembly A) 
public class DerivedInDifferentAssembly : BaseClass
{
    public void AttemptMutation()
    {
        // COMPILER ERROR CS0122: 'BaseClass.InternalState' is inaccessible 
        // due to its protection level. (Derived class, but crosses assembly boundary).
        // this.InternalState = 42; 
    }
}
```

## Property Accessor Asymmetry

The `private protected` modifier can be applied to the property declaration as a whole, or asymmetrically to individual accessors (`get` or `set`). When applied to an accessor, the `private protected` modifier must be strictly more restrictive than the property's primary access modifier.

```csharp theme={"dark"}
public class AccessorExample
{
    // The property getter is accessible to any type in the same assembly (internal).
    // The property setter is restricted to derived classes in the same assembly (private protected).
    internal string ConfigurationKey { get; private protected set; }
    
    // The property getter is accessible to derived classes anywhere (protected).
    // The property setter is restricted to derived classes in the same assembly (private protected).
    protected int Threshold { get; private protected set; }
}
```

<div
  style={{ 
display: "flex", 
justifyContent: "space-between", 
alignItems: "center", 
maxWidth: "754px", 
padding: "1rem 0",
marginBottom: "24px"
}}
>
  <span style={{ fontWeight: "bold", fontSize: "1.25rem", color: "var(--tw-prose-headings)", fontFamily: "Inter, ui-sans-serif, system-ui, sans-serif" }}>Tired of Poor C# Skills? Fix That With Deep Grasping!</span>

  <a
    href="https://syntblaze.com"
    target="_blank"
    style={{ 
  marginLeft: "24px",
  textDecoration: "none", 
  backgroundColor: "#007AFF",
  color: "#ffffff", 
  padding: "6px 16px", 
  borderRadius: "16px",
  fontSize: "0.9rem",
  fontWeight: "600",
  textAlign: "center",
  transition: "background-color 0.2s ease"
}}
  >
    Learn More
  </a>
</div>

<div style={{ display: "flex", gap: "12px", flexWrap: "wrap" }}>
  <img src="https://mintcdn.com/syntblazellc/-L0ums_2lctDSZ1l/images/skill-tracking.png?fit=max&auto=format&n=-L0ums_2lctDSZ1l&q=85&s=b9b0305c93bb501c9e767b5c76c88835" style={{ width: "30%", minWidth: 60 }} width="621" height="1344" data-path="images/skill-tracking.png" />

  <img src="https://mintcdn.com/syntblazellc/23tyuOzaWS88qFlc/images/nuggets.png?fit=max&auto=format&n=23tyuOzaWS88qFlc&q=85&s=c86c80197299762989e9b882419b2109" style={{ width: "30%", minWidth: 60 }} width="621" height="1344" data-path="images/nuggets.png" />

  <img src="https://mintcdn.com/syntblazellc/-L0ums_2lctDSZ1l/images/bite-sized-exercises.png?fit=max&auto=format&n=-L0ums_2lctDSZ1l&q=85&s=a65f9a38c37ff28ab73ed783c53c60e3" style={{ width: "30%", minWidth: 60 }} width="621" height="1344" data-path="images/bite-sized-exercises.png" />
</div>

<div style={{ display: "flex", gap: "12px", flexWrap: "wrap", marginTop: "12px" }}>
  <img src="https://mintcdn.com/syntblazellc/-L0ums_2lctDSZ1l/images/mastery-chain.png?fit=max&auto=format&n=-L0ums_2lctDSZ1l&q=85&s=748a1763454713e679260fbb95f154a2" style={{ width: "30%", minWidth: 60 }} width="621" height="1344" data-path="images/mastery-chain.png" />

  <img src="https://mintcdn.com/syntblazellc/-L0ums_2lctDSZ1l/images/element-previews.png?fit=max&auto=format&n=-L0ums_2lctDSZ1l&q=85&s=242f61448ff5dd6deaaab2dccc13b507" style={{ width: "30%", minWidth: 60 }} width="621" height="1344" data-path="images/element-previews.png" />

  <img src="https://mintcdn.com/syntblazellc/-L0ums_2lctDSZ1l/images/element-explanations.png?fit=max&auto=format&n=-L0ums_2lctDSZ1l&q=85&s=cf0fc1c31f9cd0fc26716781be05fbc9" style={{ width: "30%", minWidth: 60 }} width="621" height="1344" data-path="images/element-explanations.png" />
</div>
