Экземпляры класса, вызов переопределенного метода - C#
Формулировка задачи:
как лучше вызвать переопределенный метод?
или через статический метод(так как сделал ниже в программе)?
Console.WriteLine(m1.ToString());
class MyClass
{
public string Name { get; set; }
public int Age { get; set; }
public MyClass(string name, int age)
{
Name = name;
Age = age;
}
public override string ToString()
{
return string.Format(" Имя: {0}\tВозраст: {1}", Name, Age);
}
}
class Program
{
static void Main()
{
MyClass m1 = new MyClass("Vlad", 10);
Console.WriteLine(m1.ToString());
MyClass m2 = m1;
m2.Name = "Tom";
m2.Age = 15;
Display(m1);
Display(m2);
Console.ReadKey();
}
static void Display(MyClass m1 )
{
Console.WriteLine(m1);
}
}Решение задачи: «Экземпляры класса, вызов переопределенного метода»
textual
Листинг программы
.method private hidebysig static void Main() cil managed
{
// Code size 70 (0x46)
.maxstack 3
.locals init ([0] class ClassLibrary1.MyClass m1,
[1] class ClassLibrary1.MyClass m2)
.line 27,27 : 9,10 ''
IL_0000: nop
.line 28,28 : 13,50 ''
IL_0001: ldstr "Vlad"
IL_0006: ldc.i4.s 10
IL_0008: newobj instance void ClassLibrary1.MyClass::.ctor(string,
int32)
IL_000d: stloc.0
.line 29,29 : 13,46 ''
IL_000e: ldloc.0
IL_000f: callvirt instance string [mscorlib]System.Object::ToString()
IL_0014: call void [mscorlib]System.Console::WriteLine(string)
IL_0019: nop
.line 31,31 : 13,29 ''
IL_001a: ldloc.0
IL_001b: stloc.1
.line 32,32 : 13,29 ''
IL_001c: ldloc.1
IL_001d: ldstr "Tom"
IL_0022: callvirt instance void ClassLibrary1.MyClass::set_Name(string)
IL_0027: nop
.line 33,33 : 13,25 ''
IL_0028: ldloc.1
IL_0029: ldc.i4.s 15
IL_002b: callvirt instance void ClassLibrary1.MyClass::set_Age(int32)
IL_0030: nop
.line 34,34 : 13,25 ''
IL_0031: ldloc.0
IL_0032: call void ClassLibrary1.Program::Display(class ClassLibrary1.MyClass)
IL_0037: nop
.line 35,35 : 13,25 ''
IL_0038: ldloc.1
IL_0039: call void ClassLibrary1.Program::Display(class ClassLibrary1.MyClass)
IL_003e: nop
.line 37,37 : 13,31 ''
IL_003f: call valuetype [mscorlib]System.ConsoleKeyInfo [mscorlib]System.Console::ReadKey()
IL_0044: pop
.line 38,38 : 9,10 ''
IL_0045: ret
} // end of method Program::Main
.method private hidebysig static void Display(class ClassLibrary1.MyClass m1) cil managed
{
// Code size 9 (0x9)
.maxstack 8
.line 40,40 : 9,10 ''
IL_0000: nop
.line 41,41 : 13,35 ''
IL_0001: ldarg.0
IL_0002: call void [mscorlib]System.Console::WriteLine(object)
IL_0007: nop
.line 42,42 : 9,10 ''
IL_0008: ret
} // end of method Program::Display