当前位置: 首页 > news >正文

c# 中的类

反射 Activator.CreateInstance

class Program
{static void Main(string[] args){//反射Type t = typeof(Student);object o = Activator.CreateInstance(t, 1, "FJ");Student stu = o as Student;Console.WriteLine(stu.Name);//动态编程dynamic stu2 = Activator.CreateInstance(t, 2, "XB");Console.WriteLine(stu2.Name);}
}
class Student
{public Student(int id, string name){this.ID = id;this.Name = name;}public int ID { get; set; }public string Name { get; set; }
}

静态构造器只能定义静态成员

声明一个类,创建一个实例或创建一个对象

成员类

class Program
{static void Main(string[] args){}class Student{}
}

上面的Main方法是类成员,而Student是成员类

类的访问级别

internal代表此类可作用于当前assembly集中。

namespace MyLib.MyNamespace
{internal class Calculator{public double Add(double a, double b){return a + b;}}
}
namespace MyLib.MyNamespace2
{class Student{public Calculator Calculator { get; set; }}
}

其中MyNamespace和MyNamespace2在同一个assembly -- MyLib中。

类的继承

namespace HelloClass
{class Program{static void Main(string[] args){Type t = typeof(Car);Type tb = t.BaseType;Type tTop = tb.BaseType;Console.WriteLine(tTop.FullName);//trueConsole.WriteLine(tTop.BaseType==null);Vehicle vehicle = new Vehicle();//falseConsole.WriteLine(vehicle is Car);Car car = new Car();//trueConsole.WriteLine(car is Vehicle);Vehicle vehicle2 = new Car();Object o1 = new Vehicle();Object o2 = new Car();}}
}class Vehicle
{}
class Car : Vehicle
{}

子类的实例从语义上来说也是父类的实例

基类继承自某个基类或派生某个基类;

某个类实现了某个基接口

继承的本质是派生类在基类已有的成员的基础上对基类进行横向和纵向的发展

当父类是自定义的有参构造器子类怎么解决


//解决方案1
public Car() : base("N/A")
{this.Owner = "Car Owner";
}
//解决方案2
public Car(string owner):base(owner)
{}

构造器是不能被继承的!!

private表示此属性只能被类中的其他成员访问

protected把类成员的访问级别限制在继承链上

重写和多态

class Vehicle{public virtual void Run(){Console.WriteLine("I'm running!");}}class Car:Vehicle{public override void Run(){Console.WriteLine("Car is running!");}}

属性重写

class Program{static void Main(string[] args){Car car = new Car();car.Run();Console.WriteLine(car.Speed);Vehicle vehicle = new Vehicle();vehicle.Run();Console.WriteLine(vehicle.Speed);}}class Vehicle{private int _speed;public virtual int Speed { get {return _speed; }set {_speed=value; }}public virtual void Run(){Console.WriteLine("I'm running!");_speed = 100;}}class Car:Vehicle{private int _rpm;public override int Speed{get { return _rpm / 100; }set { _rpm = value * 100; }}public override void Run(){Console.WriteLine("Car is running!");_rpm = 5000;}}

多态的表现内容

多态的表现内容是当用一个父类类型的变量去引用子类类型实例的时候,当我们调用一个方法的时候,这个方法最终所被调用的版本是由对象的类型决定。它一定是能够调到这个继承链上最新的版本。最新的版本可能存在于我们的一个子类对象当中,也可能在重写过程当中被某一个隐藏给打断了

class Program{static void Main(string[] args){Vehicle car = new Car();car.Run();Console.WriteLine(car.Speed);Car vehicle = new RaceCar();vehicle.Run();}}class Vehicle{public virtual void Run(){Console.WriteLine("I'm running!");}}class Car:Vehicle{public override void Run(){Console.WriteLine("Car is running!");}}class RaceCar:Car{public override void Run(){Console.WriteLine("Race car is running !"); }}

接口和抽象类

solid设计模式

是五个面向对象基本设计原则的首字母的缩写,分别是:

single responsibility principle 单一职责原则(SRP)

open close principle 开闭原则(OCP)

liskov substitution principle 里氏替换原则(LSP)

interface segregation principle 接口隔离原则(ISP)

dependency inversion principle 依赖反转原则(DIP)

class Program{static void Main(string[] args){Vehicle v = new RaceCar();v.Run();}}abstract class Vehicle{public void Stop(){Console.WriteLine("Stopped!");}public void Fill(){Console.WriteLine("Pay and fill...");}public abstract void Run();}class Car : Vehicle{public override void Run(){Console.WriteLine("Car is running!");}}class Truck : Vehicle{public override void Run(){Console.WriteLine("Truck is running!");}}class RaceCar : Vehicle{public override void Run(){Console.WriteLine("Race car is running!");}}

接口:类中的所有成员方法都是纯虚函数抽象的,且都是public

class Program{static void Main(string[] args){Vehicle v = new RaceCar();v.Run();}}interface IVehicle{void Stop();void Fill();void Run();}abstract class Vehicle:IVehicle{public void Stop(){Console.WriteLine("Stopped!");}public void Fill(){Console.WriteLine("Pay and fill...");}public abstract void Run();}class Car : Vehicle{public override void Run(){Console.WriteLine("Car is running!");}}class Truck : Vehicle{public override void Run(){Console.WriteLine("Truck is running!");}}class RaceCar : Vehicle{public override void Run(){Console.WriteLine("Race car is running!");}}

http://www.lryc.cn/news/178941.html

相关文章:

  • 基于单片机的煤气泄漏检测报警装置设计
  • [导弹打飞机H5动画制作] 导弹每次飞行的随机路线制作
  • OpenCV实现FAST算法角点检测 、ORB算法特征点检测
  • 【Unity的 Built-in 渲染管线下实现好用的GUI模糊效果_Blur_案例分享(内附源码)】
  • AR智能眼镜:提升现场服务技能、效率与盈利能力的利器(一)
  • ChatGPT 在机器学习中的应用
  • 【JavaEE】锁策略
  • 在 SDXL 上用 T2I-Adapter 实现高效可控的文生图
  • Python分支结构和循环结构
  • Unity调用API函数对系统桌面和窗口截图
  • 【问题思考总结】CPU怎么访问磁盘?CPU只有32位,最多只能访问4GB的空间吗?
  • UG NX二次开发(C++)-CAM-根据刀具对程序组进行重新分组
  • Unity如何实现TreeView
  • Android widget 小部件使用指南强化版
  • Linux下C语言操作网卡的几个代码实例?特别实用
  • noip2011选择旅馆
  • vue造轮子完整指南--npm组件包开发步骤
  • 28 drf-Vue个人向总结-1
  • 线性代数(七) 矩阵分析
  • myArm 全新七轴桌面型机械臂
  • tomcat乱码解决
  • 【Linux】详解线程第三篇——线程同步和生产消费者模型
  • k8s 安装
  • 红队打靶:THE PLANETS: MERCURY打靶思路详解(vulnhub)
  • 【网络协议】IP
  • Python 布尔类型
  • iOS设备管理器iMazing比iTunes好用吗?有哪些优势
  • Opengl之深度测试
  • 利用ICG-NH2/Amine进行DNA标记1686147-55-6星戈瑞
  • Pyecharts数据可视化