Поведение индексаторов

Всем привет! Допустим у нас есть 3 метода-индексатора приведённые ниже. Почему во время выполнения он запускает метод с параметром this[int i], а не this[byte i] или this[long i]?

MyType mType = new MyType();

Console.WriteLine($"{mType[0]}");

public sealed class MyType {
    public string this[byte i]{
        get {
            return "Indexer byte";
        }
        set{
            value = "Indexer byte";
        }
    }

    public string this[int i]{
        get{
            return "Indexer int";
        }
        set{
            value = "Indexer int";
        }
    }

    public string this[long i]{
        get{
            return "Indexer long";
        }
        set{
            value = "Indexer long";
        }
    }
}

Ответы (1 шт):

Автор решения: aepot

Чтобы получить нужный тип, используйте нужный литерал

MyType instance = new();

Console.WriteLine(instance[(byte)0]);
Console.WriteLine(instance[0]);
Console.WriteLine(instance[0L]);

Получается так

Indexer byte
Indexer int
Indexer long
→ Ссылка