C# 面向对象:类、根据不同操作符操作两个变量

来源:互联网 发布:侠客行 叮叮当当 知乎 编辑:程序博客网 时间:2024/06/07 16:53

1、当使用类时,应添加一个新类

2、类名首字母需大写

3、字段用来存储数据,private;属性用来保护字段;接口、构造函数、方法

        public struct1        {              // 自动属性:虽然没有写字段,但是还是会生成字段            get;            set;         }

4、类写好后,需要创建对象: Classes cl=new  Classes( );   // Classes是自定义的类名

      new关键字的作用:1、在堆中开辟空间 2、在开辟空间中创建对象  3、调用对象的构造函数(构造函数必须为public,初始化对象)

5、static、  抽象类不可以创建对象;

     在类中  this.name   ,this指当前类的对象(如下面代码)

6、静态类的成员被修饰时,调用类名.静态成员名  ;非静态调用:对象名.非静态成员名  /  对象名.实例成员

    This 的用法:

    第一个用法:

        public void print()        {            string name = "vivi";            Console.WriteLine("{0}",this.name);  // 在这个函数中,本来是打印对象的name,如果不加this进行限定的话,直接打印的为变量的值。        }

     第二个用法:

     调用自己的构造函数

   

     public class  void initial(int n1,int n2,int n3,int n4 ,int n5)       {            this.N1=n1;            this.N2=n2;            this.N3=n3;            this.N4=n4;            this.N5=n5;        }        public class void initial(int n1,int n2,int n3)            :this(n1,n2,n3,0,0)  // 调用自己全参的构造函数        {         }


7、继承单一性、传递性;接口可以有多个继承;子类没法继承父类的字段(private),子类没有继承父类的构造函数,而是默认会调用父类按个无参数的构      造函数,若父类的构造函数重写了,自动替换掉父类的无参数的默认构造函数,子类无法调用父类的默认无参数的构造函数,出现异常,需要子类重新写一个构造函数。子类先创建一个父类对象,在子类中调用父类的构造函数,使用base()

      继承:方法


8、子类可以复制给父类;如果父类装的是子类,可以将父类转换为子类;

      如果两个类有继承关系,子类既可以使用自己的成员,也可以使用从父类继承的成员。但是父类永远只能使用自己的成员。 

      子类之间也不能相互使用对方的成员。

 

         public  class student:person           {  }         person  ps=new student();  //ps表现的是父类的类型,装的是子类的对象。-- 父类。         student st=(student)person;         或者使用as来转换:         stduent st1 = ps as student;// 使用as来转换的话,转换成功,返回转换后的对象;转换失败,返回null。         或者使用is做判断         if( ps is student) {  }  // 如果可以转换,返回true;否则返回false         object类是所有类的父类。

9、虚方法和抽象类

      如果父类有意义,可以创建方法进行调用。可以使用virtual;

      如果父类不知道方法如何实现,可使用抽象类abstract;

      虚拟成员或抽象成员不能是私有的。

      以前都是面向过程,现在是面向对象--类;


例子:实现根据不同操作符计算两个int的操作;// 本处用两个int型;

1、Program.csnamespace calculator{    class Program    {        static void Main(string[] args)        {            //创建一个面向对象的,两个数字的运算;            Console.WriteLine("请输入要计算的第一个数字");            int num1=Convert.ToInt32(Console.ReadLine ());            Console.WriteLine("请输入要计算的第二个数字");            int num2 = Convert.ToInt32(Console.ReadLine());            Console.WriteLine("请输入运算符");            string oper =Console.ReadLine ();            // 根据运算符不同,决定怎么计算                     CalFather cf = Decise(oper,num1,num2);            double r = cf.GetResult();            Console.WriteLine("计算结果为{0}",r);            Console.ReadKey();        }        public static CalFather Decise(string oper,int num1,int num2)  // static 需要引用类名使用;非static的话,需要在这里创建program类(所在的类),再引用        {            CalFather calf=null;            switch(oper){                case "+":                    calf = new PlusCal(num1,num2);                    break;                case "-":                    calf = new MinuCal(num1,num2);                    break;                case "*":                    calf = new MultiCal(num1,num2);                    break;                case "/":                    calf = new DivCal(num1,num2);                    break;                default:                    Console.WriteLine("请输入正确的操作符");                    break;            }            return calf;        }     }}2、CalFather.csnamespace calculator{    public abstract class CalFather    {        public int Number1        {            get;            set;        }        public int Number2        {            get;            set;        }        public CalFather(int N1, int N2)        {            this.Number1 = N1;            this.Number2 = N2;        }         public abstract  double GetResult();     }}3、PlusCal.csnamespace calculator{    public class PlusCal : CalFather    {        public  PlusCal(int n1, int n2)            :base(n1,n2)        {         }                    public  override double GetResult() //重写父类的抽象方法        {            double res;            res = this.Number1 + this.Number2;            return res;        }    }}4、MinuCal.csnamespace calculator{   public class MinuCal:CalFather     {       public  MinuCal(int m1,int m2)           :base(m1,m2){            }       public override double GetResult()       {           return this.Number1 - this.Number2;       }    }}5、MultiCal.csnamespace calculator{    public class MultiCal : CalFather    {        public MultiCal(int n1,int n2) : base(n1,n2) { }        public override double GetResult()        {            return this.Number1 * this.Number2;        }    }}6、DivCal.csnamespace calculator{    public class DivCal : CalFather    {        public DivCal(int n1,int n2) : base(n1,n2) { }        public override double GetResult()        {            return this.Number1 / this.Number2;        }    }}




原创粉丝点击