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 }

浙公网安备 33010602011771号