В C# не требуется уникальности имен методов в классе. Существование в классе методов с одним и тем же именем называется перегрузкой, а сами методы называются перегруженными. Перегрузка методов полезна, когда требуется решать одинаковые задачи с разным набором параметров. Типичный пример — это конструкторы класса, но перегружать можно и любой другой метод.
При вызове неперегруженного метода его имя однозначно определяет, какой метод должен выполняться в точке вызова. Когда же метод перегружен, то знания имени недостаточно. Уникальной характеристикой перегруженных методов является их сигнатура. Перегруженные методы, имея одинаковое имя, должны отличаться либо числом параметров, либо их типами, либо ключевыми словами (отметим, что с точки зрения сигнатуры ключевые слова ref или out не отличаются). Уникальность сигнатуры позволяет вызвать требуемый перегруженный метод.
Ниже приведен пример, в котором выполнена перегрузка метода А, для которого заданы четыре метода с именем А, различающиеся по сигнатуре, и метод для их тестирования TestLoadMethods:
void A (out long p2, int p1){ p2 =(long) Math. Pow (p1,3);
}.
void A (out long p2, params intQ p){.
p2=0;
for (int i=0; i.
Console.WriteLine («Метод A-2»);
}.
void A (out double p2, double p1){ p2 = Math. Pow (p1,3);
}.
void A (out double p2, params double () p){.
p2=0;
for (int i=0; i.
}.
public void TestLoadMethods (){ long u=0; double v =0;
A (out u, 7); A (out v, 7.5);
Console.WriteLine («u= {0}, v= {1}», u, v);
A (out v, 7);
Console.WriteLine («v= {0}», v);
A (out u, 7,11,13);
A (out v, 7.5, Math. Sin (11.5)+Math.Cos (13.5), 15.5);
Console.WriteLine («u= {0}, v= {1}», u, v);
}.
Эти методы различаются типами параметров и ключевым словом params. Когда вызывается метод, А с двумя параметрами, то в зависимости от типа будет вызываться реализация без ключевого слова params. Когда же число параметров больше двух, то работает реализация, позволяющая работать с заранее нс фиксированным числом параметров.