A variable can use an interface type instead of a concrete class type.

interface variable An interface variable can hold any object that implements that interface.

Interface Variables

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

interface IGreeter
{
    string Greet();
}

class FriendlyGreeter : IGreeter
{
    private readonly string name;

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

    public string Greet()
    {
        return "hello " + name;
    }
}

class Program
{
    static void Main()
    {
        string name = "Mina";
        IGreeter greeter = new FriendlyGreeter(name);
        string message = greeter.Greet();

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

interface IGreeter
{
    string Greet();
}

class FriendlyGreeter : IGreeter
{
    private readonly string name;

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

    public string Greet()
    {
        return "hello " + name;
    }
}

class Program
{
    static void Main()
    {
        string name = "Omar";
        IGreeter greeter = new FriendlyGreeter(name);
        string message = greeter.Greet();

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

interface IGreeter
{
    string Greet();
}

class FriendlyGreeter : IGreeter
{
    private readonly string name;

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

    public string Greet()
    {
        return "hello " + name;
    }
}

class Program
{
    static void Main()
    {
        string name = "Vera";
        IGreeter greeter = new FriendlyGreeter(name);
        string message = greeter.Greet();

        Console.WriteLine($"name={name}");
        Console.WriteLine($"message={message}");
    }
}
  1. name ← Mina

    24{25    static void Main()26    {27        string name→ Mina = "Mina"; //@name="Omar", "Vera"28        IGreeter greeter = new FriendlyGreeter(name);29        string message = greeter.Greet();
  2. this.name ← Mina

    12public FriendlyGreeter(string nameMina)13{14    this.name→ Mina = nameMina;15}
  3. greeter ← FriendlyGreeter

    27string name = "Mina"; //@name="Omar", "Vera"28IGreeter greeter→ FriendlyGreeter = new FriendlyGreeter(name);29string message = greeterFriendlyGreeter.Greet();
  4. public string Greet()

    17public string Greet()18{19    return "hello " + nameMina;20}
  5. message ← hello Mina

    28    IGreeter greeter = new FriendlyGreeter(name);29    string message→ hello Mina = greeterFriendlyGreeter.Greet();3031    Console.WriteLine($"name={nameMina}");32    Console.WriteLine($"message={messagehello Mina}");33}
    outputname=Mina
    message=hello Mina
  1. name ← Omar

    24{25    static void Main()26    {27        string name→ Omar = "Omar";28        IGreeter greeter = new FriendlyGreeter(name);29        string message = greeter.Greet();
  2. this.name ← Omar

    12public FriendlyGreeter(string nameOmar)13{14    this.name→ Omar = nameOmar;15}
  3. greeter ← FriendlyGreeter

    27string name = "Omar";28IGreeter greeter→ FriendlyGreeter = new FriendlyGreeter(name);29string message = greeterFriendlyGreeter.Greet();
  4. public string Greet()

    17public string Greet()18{19    return "hello " + nameOmar;20}
  5. message ← hello Omar

    28    IGreeter greeter = new FriendlyGreeter(name);29    string message→ hello Omar = greeterFriendlyGreeter.Greet();3031    Console.WriteLine($"name={nameOmar}");32    Console.WriteLine($"message={messagehello Omar}");33}
    outputname=Omar
    message=hello Omar
  1. name ← Vera

    24{25    static void Main()26    {27        string name→ Vera = "Vera";28        IGreeter greeter = new FriendlyGreeter(name);29        string message = greeter.Greet();
  2. this.name ← Vera

    12public FriendlyGreeter(string nameVera)13{14    this.name→ Vera = nameVera;15}
  3. greeter ← FriendlyGreeter

    27string name = "Vera";28IGreeter greeter→ FriendlyGreeter = new FriendlyGreeter(name);29string message = greeterFriendlyGreeter.Greet();
  4. public string Greet()

    17public string Greet()18{19    return "hello " + nameVera;20}
  5. message ← hello Vera

    28    IGreeter greeter = new FriendlyGreeter(name);29    string message→ hello Vera = greeterFriendlyGreeter.Greet();3031    Console.WriteLine($"name={nameVera}");32    Console.WriteLine($"message={messagehello Vera}");33}
    outputname=Vera
    message=hello Vera