An interface names behavior that a class promises to provide.

interface An interface describes methods or properties without storing object state.

Interface Intro

name
InterfaceIntro.cs
Replay: real traced execution (multi-file project)
using System;

interface ILabel
{
    string Label();
}

class NameTag : ILabel
{
    private readonly string name;

    public NameTag(string name)
    {
        this.name = name;
    }

    public string Label()
    {
        return "tag:" + name;
    }
}

class Program
{
    static void Main()
    {
        string name = "Ari";
        NameTag tag = new NameTag(name);
        string label = tag.Label();

        Console.WriteLine($"name={name}");
        Console.WriteLine($"label={label}");
    }
}
using System;

interface ILabel
{
    string Label();
}

class NameTag : ILabel
{
    private readonly string name;

    public NameTag(string name)
    {
        this.name = name;
    }

    public string Label()
    {
        return "tag:" + name;
    }
}

class Program
{
    static void Main()
    {
        string name = "Bo";
        NameTag tag = new NameTag(name);
        string label = tag.Label();

        Console.WriteLine($"name={name}");
        Console.WriteLine($"label={label}");
    }
}
using System;

interface ILabel
{
    string Label();
}

class NameTag : ILabel
{
    private readonly string name;

    public NameTag(string name)
    {
        this.name = name;
    }

    public string Label()
    {
        return "tag:" + name;
    }
}

class Program
{
    static void Main()
    {
        string name = "Cleo";
        NameTag tag = new NameTag(name);
        string label = tag.Label();

        Console.WriteLine($"name={name}");
        Console.WriteLine($"label={label}");
    }
}
  1. name ← Ari

    24{25    static void Main()26    {27        string name→ Ari = "Ari"; //@name="Bo", "Cleo"28        NameTag tag = new NameTag(name);29        string label = tag.Label();
  2. this.name ← Ari

    12public NameTag(string nameAri)13{14    this.name→ Ari = nameAri;15}
  3. tag ← NameTag

    27string name = "Ari"; //@name="Bo", "Cleo"28NameTag tag→ NameTag = new NameTag(name);29string label = tagNameTag.Label();
  4. public string Label()

    17public string Label()18{19    return "tag:" + nameAri;20}
  5. label ← tag:Ari

    28    NameTag tag = new NameTag(name);29    string label→ tag:Ari = tagNameTag.Label();3031    Console.WriteLine($"name={nameAri}");32    Console.WriteLine($"label={labeltag:Ari}");33}
    outputname=Ari
    label=tag:Ari
  1. name ← Bo

    24{25    static void Main()26    {27        string name→ Bo = "Bo";28        NameTag tag = new NameTag(name);29        string label = tag.Label();
  2. this.name ← Bo

    12public NameTag(string nameBo)13{14    this.name→ Bo = nameBo;15}
  3. tag ← NameTag

    27string name = "Bo";28NameTag tag→ NameTag = new NameTag(name);29string label = tagNameTag.Label();
  4. public string Label()

    17public string Label()18{19    return "tag:" + nameBo;20}
  5. label ← tag:Bo

    28    NameTag tag = new NameTag(name);29    string label→ tag:Bo = tagNameTag.Label();3031    Console.WriteLine($"name={nameBo}");32    Console.WriteLine($"label={labeltag:Bo}");33}
    outputname=Bo
    label=tag:Bo
  1. name ← Cleo

    24{25    static void Main()26    {27        string name→ Cleo = "Cleo";28        NameTag tag = new NameTag(name);29        string label = tag.Label();
  2. this.name ← Cleo

    12public NameTag(string nameCleo)13{14    this.name→ Cleo = nameCleo;15}
  3. tag ← NameTag

    27string name = "Cleo";28NameTag tag→ NameTag = new NameTag(name);29string label = tagNameTag.Label();
  4. public string Label()

    17public string Label()18{19    return "tag:" + nameCleo;20}
  5. label ← tag:Cleo

    28    NameTag tag = new NameTag(name);29    string label→ tag:Cleo = tagNameTag.Label();3031    Console.WriteLine($"name={nameCleo}");32    Console.WriteLine($"label={labeltag:Cleo}");33}
    outputname=Cleo
    label=tag:Cleo