C#里式转换

1、里式转发语法说明

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 namespace 里式转换
 8 {
 9     internal class Program
10     {
11         static void Main(string[] args)
12         {
13 
14             /* 
15            //1、子类可以赋值给父类,赋值后将只能执行父类的方法,如果有一个地方需要一个父类作为参数,我们可以给一个子类对象作为父类
16             Student s = new Student();
17             Person p = s;
18             //简写,直接new子类对象,赋值给父类
19             Person p = new Student();
20             p.SayHello();//输出:我是父类
21             */
22 
23 
24             /*
25 
26             //2、如果父类中装的是子类对象,那么可以将这个父类强转为子类对象
27             //new一个子类对象赋值给父类,代表父类中存的是子类对象
28             Person p = new Student();
29             //将一个父类对象p(实际存放的是子类对象),强转为子类对象
30             //注意:无法直接new父类对象,然后采用此方式强转(System.InvalidCastException:“无法将类型为“Person”的对象强制转换为类型“Student”。”)
31             //必须满足前提条件:父类中存的是子类对象时才可使用此方式强转
32             Student ss = (Student)p;
33             //执行学生类的SayHello
34             ss.SayHello();//输出:我是学生类
35             */
36 
37 
38             /*
39              * 声明一个子类对象,使用(父类)子类对象方式强转,常见与(父类)this,this代表当前类的对象
40             Student s = new Student();
41             Person p = (Person)s;
42             p.SayHello();输出:我是父类
43             */
44 
45 
46             Console.ReadKey();
47         }
48 
49         public class Person
50         {
51             public void SayHello()
52             {
53                 Console.WriteLine("我是父类");
54             }
55         }
56 
57         public class Student : Person
58         {
59             public void SayHello()
60             {
61                 Console.WriteLine("我是学生类");
62             }
63         }
64 
65         public class Teacher : Person
66         {
67             public void SayHello()
68             {
69                 Console.WriteLine("我是老师类");
70             }
71         }
72 
73 
74     }
75 }
 
 
2、类型转换判断(is as) 的用法
is:如果可以转换,则返回true,转换失败返回false
as:如果可以转换,则返回对应的对象,否则返回一个null
 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 namespace 里式转换
 8 {
 9     internal class Program
10     {
11         static void Main(string[] args)
12         {
13             Person p = new Teacher();
14 
15             /*
16             //判断p是否是Teacher类型的对象
17             if(p is Teacher)
18             {
19                 Teacher t = (Teacher)p;
20                 t.SayHello();//输出:我是老师类
21             }
22             else
23             {
24                 Console.WriteLine("转换失败");
25             }
26             */
27 
28             /*
29             //判断p是否为Student对象类型,如果是,则返回该对象,否则返回null
30             Student s = p as Student;
31             Console.WriteLine(s is null);//输出:True,代表返回的null
32             */
33             //判断p是否为Teacher对象类型,如果是,则返回该对象,否则返回null
34             Teacher t1 = p as Teacher;
35             t1.SayHello();//输出:我是老师类
36 
37             Console.ReadKey();
38         }
39 
40         public class Person
41         {
42             public void SayHello()
43             {
44                 Console.WriteLine("我是父类");
45             }
46         }
47 
48         public class Student : Person
49         {
50             public void SayHello()
51             {
52                 Console.WriteLine("我是学生类");
53             }
54         }
55 
56         public class Teacher : Person
57         {
58             public void SayHello()
59             {
60                 Console.WriteLine("我是老师类");
61             }
62         }
63 
64 
65     }
66 }

 

posted @ 2022-06-07 23:25  hpc_for_s  阅读(50)  评论(0)    收藏  举报