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

Interface Variables

InterfaceVariables.cs
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 = ;
        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 = ;
        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 = ;
        IGreeter greeter = new FriendlyGreeter(name);
        string message = greeter.Greet();

        Console.WriteLine($"name={name}");
        Console.WriteLine($"message={message}");
    }
}
interface variable An interface variable can hold any object that implements that interface.