C# Academy · Lektion

public/internal/protected/private (med anmärkning om file)

Lär er hur public, internal, protected och private ändrar synlighet och se reglerna för arv och samma assembly. Observera att file-scope-åtkomst inte finns i C# 6.

Lektion 1 av 38 steg

public/internal/protected/private (med anmärkning om file) är en gratis lektion i C# Academy på CoddyKit. Detta är lektion 1 av 3. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för C# Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i C# Academy innehåller totalt 3 lektioner.

Översikt över åtkomstmodifierare

Mål: Välj rätt synlighet.

  • public: överallt
  • internal: samma assembly
  • protected: härledda klasser
  • private: samma klass
  • file: nyare än C# 6 (endast information)

private kontra public

Håll fält private och exponera validerade public-medlemmar.

using System;

// private: only inside the class; public: everywhere the class is visible
public class Box
{
  private int _width;             // hidden storage
  public int Width                // controlled access
  {
    get { return _width; }
    set { _width = value < 0 ? 0 : value; } // simple guard
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    Box b = new Box();
    // b._width = -5; // INVALID: private (kept as comment)
    b.Width = 10;      // OK: public property
    Console.WriteLine("Width = " + b.Width);
  }
}

protected vid arv

protected används vid arv: härledda typer kan använda det, men utomstående kan inte göra det.

using System;

public class BaseCounter
{
  protected int Count; // derived classes can see this
  public int Value() { return Count; }
}

public class StepCounter : BaseCounter
{
  public void Step() { Count = Count + 1; } // allowed: protected
}

public class Program
{
  public static void Main(string[] args)
  {
    StepCounter sc = new StepCounter();
    sc.Step();
    // sc.Count = 5; // INVALID from outside (commented)
    Console.WriteLine("Value = " + sc.Value());
  }
}

internal-åtkomst

internal begränsar synligheten till den aktuella assemblyn (bibliotekets eller appens bygge).

using System;

// internal type: visible only inside this assembly
internal class InternalHelper
{
  public static string Ping() { return "pong"; }
}

// public type can use internal from the same assembly
public class UsesInternal
{
  public string Call() { return InternalHelper.Ping(); }
}

public class Program
{
  public static void Main(string[] args)
  {
    UsesInternal u = new UsesInternal();
    Console.WriteLine(u.Call());
  }
}

protected internal

protected internal betyder att något är åtkomligt för härledda typer eller var som helst i samma assembly.

using System;

public class LibraryBase
{
  // Accessible to derived types OR anywhere in the same assembly
  protected internal void Touch() { Console.WriteLine("touched"); }
}

public class LibChild : LibraryBase
{
  public void Use() { Touch(); } // via inheritance
}

public class Program
{
  public static void Main(string[] args)
  {
    LibChild c = new LibChild();
    c.Use();

    LibraryBase b = new LibraryBase();
    b.Touch(); // same assembly, allowed
  }
}

Kommentarer och tips om file-modifieraren

Obs! Åtkomstmodifieraren file tillkom i nyare C# (den finns inte i C# 6). I C# 6 använder Ni public, internal, protected, private och protected internal.

  • Föredra private som standard
  • Använd public endast för API:ets offentliga yta
  • Använd internal för att dölja implementationen från andra assemblyer
  • Använd protected för samarbete mellan bas- och härledda klasser

Innebörden av internal

Snabb kontroll: Vad betyder åtkomstmodifieraren internal i C#?

Sammanfattning

Sammanfattning: Välj den minsta nödvändiga synligheten: private → protected/internal → public. C# 6 innehåller inte den nyare modifieraren file; använd internal för att dölja innehåll på assemblynivå.

Gratis att börja

Lär dig C# med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
93
Lektioner
346

Vanliga frågor

Är lektionen ”public/internal/protected/private (med anmärkning om file)” gratis?

Ja – hela texten till ”public/internal/protected/private (med anmärkning om file)” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i C# Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i C# Academy innehåller totalt 3 lektioner.

Vad lär jag mig i ”public/internal/protected/private (med anmärkning om file)”?

Lär er hur public, internal, protected och private ändrar synlighet och se reglerna för arv och samma assembly. Observera att file-scope-åtkomst inte finns i C# 6. Ni övar på C# Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig C# Academy?

Du behöver inga förkunskaper. Utbildningen i C# Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 1 av 3.

Hur lång tid tar lektionen ”public/internal/protected/private (med anmärkning om file)”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här C# Academy-lektionen?

Ja. Varje C# Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. public/internal/protected/private (med anmärkning om file)
  2. Namespaces, using-direktiv och globala usings (anmärkning)
  3. Partiella typer och filer
← Tillbaka till C# Academy