Основы языка C# 2005. Евсеева О.Н - 37 стр.

UptoLike

Составители: 

41
/// <param name="name"> Имя второго аргумента</param>
/// <param name="any"> Допустим аргумент любого типа</param>
private void WhoIsWho(string name, object any)
{
Console.WriteLine("type {0} is {1} , value is {2}",
name, any.GetType(), any.ToString());
}
Вот открытый (public) метод класса Testing, в котором многократно
вызывается метод WhoIsWho с аргументами разного типа:
/// <summary>
/// получаем информацию о типе и значении
/// переданного аргументапеременной или выражения
/// </summary>
public void WhoTest()
{
WhoIsWho("x", x);
WhoIsWho("ux", ux);
WhoIsWho("y", y);
WhoIsWho("dy", dy);
WhoIsWho("s", s);
WhoIsWho("11 + 5.55 + 5.5f", 11 + 5.55 + 5.5f);
obj = 11 + 5.55 + 5.5f;
WhoIsWho("obj", obj);
}
Отметим, что сущность anyформальный аргумент класса Object,
который при каждом вызове динамически изменяет тип, связываясь с
объектом, заданным фактическим аргументом. Поэтому тип аргумента,
выдаваемый на консоль, – это тип фактического аргумента. Отметим также, что
наследуемый от класса Object метод GetType возвращает тип FCL, то есть тот
тип, на который отражается тип языка и с которым реально идет работа при
выполнении модуля. В большинстве вызовов фактическим аргументом является
переменнаясоответствующее свойство класса Testing, но в одном случае
передается обычное арифметическое выражение, автоматически преобразуемое
в объект. Аналогичная ситуация имеет место и при выполнении присваивания в
рассматриваемой процедуре.
На рис. 11 показаны результаты вывода на консоль, полученные при
вызове метода WhoTest в приведенной выше процедуре Main класса Class1.