public override string ToStringO {
return "Объект #" + id + " типа MyClass";
}
}
class Test {
static void Main {
MyClass obi = new MyClass;
MyClass ob2 = new MyClass;
MyClass ob3 = new MyClass;
Console.WriteLine(obi);
Console.WriteLine(ob2);
Console.WriteLine(ob3) ;
}
}
При выполнении этого кода получается следующий результат.
Объект #0 типа MyClass Объект #1 типа MyClass Объект #2 типа MyClass
Упаковка и распаковка
Как пояснялось выше, все типы в С#, включая и простые типы значений, являются производными от класса object. Следовательно, ссылкой типа object можно воспользоваться для обращения к любому другому типу, в том числе и к типам значений. Когда ссылка на объект класса ob j ect используется для обращения к типу значения, то такой процесс называется
Ниже приведен простой пример, демонстрирующий упаковку и распаковку.
// Простой пример упаковки и распаковки.
using System;
class BoxingDemo { static void Main {
int x; object obj ;
X = 10;
obj = х; // упаковать значение переменной х в объект
int у = (int)obj; // распаковать значение из объекта, доступного по // ссылке obj, в переменную типа int Console.WriteLine(у);
}
}
В этом примере кода выводится значение 10. Обратите внимание на то, что значение переменной х упаковывается в объект простым его присваиванием переменнойobj,ссылающейся на этот объект. А затем это значение извлекается из объекта, доступного по его ссылкеobj,и далее приводится к типуint.
Ниже приведен еще один, более интересный пример упаковки. В данном случае значение типаintпередается в качестве аргумента методуSqr , который, в свою очередь, принимает параметр типаobject.
// Пример упаковки при передаче значения методу.
using System;
class BoxingDemo { static void Main { int x; x = 10;
Console.WriteLine("Значение x равно: " + x);
// значение переменной x автоматически упаковывается // когда оно передается методу Sqr. х = BoxingDemo.Sqr(х) ;