当前位置: 首页 > 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!");}}

相关文章:

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.Cre…...

基于单片机的煤气泄漏检测报警装置设计

一、项目介绍 煤气泄漏是一种常见的危险情况,可能导致火灾、爆炸和人员伤亡。为了及时发现煤气泄漏并采取相应的安全措施,设计了一种基于单片机的煤气泄漏检测报警装置。 主控芯片采用STM32F103C8T6作为主控芯片,具有强大的计算和控制能力。…...

[导弹打飞机H5动画制作] 导弹每次飞行的随机路线制作

技术核心提示: 第一步:检测引导层插件是否具备,如果没有手工添加: createjs.MotionGuidePlugin.install(); 第二步:增加全局变量: var fValue=0; var iOddEven =0; var missileObj=null; 第三步:填写 第一帧 代码: if (missileObj)stage.removeChild(missileObj);missile…...

OpenCV实现FAST算法角点检测 、ORB算法特征点检测

目录 1 Fast算法 1.1 Fast算法原理 1.2 实现办法 1.2.1 机器学习的角点检测器 1.2.2 非极大值抑制 1.3 代码实现 1.4 结果展示 2 ,ORB算法 2.1代码实现 2.2 结果展示 1 Fast算法 1.1 Fast算法原理 1.2 实现办法 1.2.1 机器学习的角点检测器 1.2.2 …...

【Unity的 Built-in 渲染管线下实现好用的GUI模糊效果_Blur_案例分享(内附源码)】

CGPROGRAM实现好用的GUI模糊效果 实现Blur模糊方式1C#代码如下方式1_Shader代码如下实现Blur模糊方式2方式2_Shader如下实现Blur模糊方式1 其他的模糊效果,在这一篇。 效果如图: 新建一个C#文件,命名为"CommandBlur",打开C#,删除内容,复制粘贴下面的代码:…...

AR智能眼镜:提升现场服务技能、效率与盈利能力的利器(一)

随着技术的不断进步,现场服务组织正朝着远程支持转变,用以解决技能差距和生产力问题,提高员工培训和操作效率,同时为企业提高利润率,创造竞争优势。 本文将探讨增强现实(AR)、辅助现实&#xf…...

ChatGPT 在机器学习中的应用

办公室里一个机器人坐在人类旁边,Artstation 上的流行趋势,美丽的色彩,4k,充满活力,蓝色和黄色, DreamStudio出品 一、介绍 大家都知道ChatGPT。它在解释机器学习和深度学习概念方面也非常高效,…...

【JavaEE】锁策略

文章目录 前言1. 乐观锁和悲观锁2. 重量级锁和轻量级锁3. 自旋锁和挂起等待锁4. 公平锁和非公平锁5. 可重入锁和非可重入锁6. 读写锁Java synchronized 分别对应哪些锁策略1. 乐观锁和悲观锁2. 重量级锁和轻量级锁3. 自旋锁和挂起等待锁4. 公平锁和非公平锁5. 可重入锁和非可重…...

在 SDXL 上用 T2I-Adapter 实现高效可控的文生图

T2I-Adapter 是一种高效的即插即用模型,其能对冻结的预训练大型文生图模型提供额外引导。T2I-Adapter 将 T2I 模型中的内部知识与外部控制信号结合起来。我们可以根据不同的情况训练各种适配器,实现丰富的控制和编辑效果。 同期的 ControlNet 也有类似的…...

Python分支结构和循环结构

嗨喽~大家好呀,这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 一.分支结构 分支结构是根据判断条件结果而选择不同向前路径的运行方式,分支结构分为:单分支,二分支和多分支。 1&#xff0…...

Unity调用API函数对系统桌面和窗口截图

Unity3D调用WINAPI函数对系统窗口截图 引入WINAPI函数调用WINAPI函数进行截图使用例子 引入WINAPI函数 using System; using System.Collections; using System.Runtime.InteropServices; using System.Drawing;[DllImport("user32.dll")]private static extern Int…...

【问题思考总结】CPU怎么访问磁盘?CPU只有32位,最多只能访问4GB的空间吗?

问题 在学习操作系统的时候发现了这样一个问题,32位的CPU寻址空间只有4GB,难道只有4GB的空间可以使用吗?以此为始,我开始了一些思考。 思考 Q1:首先,我似乎混淆了一个概念,内存和外存&#x…...

UG NX二次开发(C++)-CAM-根据刀具对程序组进行重新分组

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1、前言2、在UG NX中创建一个三维模型3、在UG NX/CAM中创建多个加工程序4、采用UG NX二次开发(NXOpen)实现按照刀具分组程序组4.2 创建UI Styler4.1 实现逻辑4.2 生成的代码如下:4.3 测试效果4.…...

Unity如何实现TreeView

前言 最近有一个需求,需要实现一个TreeView的试图显示,开始我一直觉得这么通用的结构,肯定有现成的UI组件或者插件可以使用,结果,找了好久,都没有找到合适的插件,有两个效果差强人意。 最后在回家的路上突然灵光一闪,想到了一种简单的实现方式,什么插件都不用,仅使用…...

Android widget 小部件使用指南强化版

Android widget 小部件使用指南强化版 一、简单UI的小部件二、含集合的小部件三、可配置的小部件四、可控制的小部件五、Android 12 Widget 更新 小部件是主屏幕定制的一个重要方面。您可以将它们视为应用程序最重要的数据和功能的“概览”视图,这些数据和功能可以直…...

Linux下C语言操作网卡的几个代码实例?特别实用

前面写了一篇关于网络相关的文章:如何获取当前可用网口。 《简简单单教你如何用C语言列举当前所有网口!》 那么如何使用C语言直接操作网口? 比如读写IP地址、读写MAC地址等。 一、原理 主要通过系统用socket()、ioctl()、实现 int sock…...

noip2011选择旅馆

1.审题:第一个人与第二个人入住的旅馆要求是同色的; 两个人去消费的旅馆并没有要求与入住的旅馆是同色的(这点要小心) 2.要求记录以下数据: 1)a[color]表示当前同为颜色color的旅馆数 2)b[co…...

vue造轮子完整指南--npm组件包开发步骤

一、项目包文件的创建和初始化。 1. 新建项目包。 vue create <Project Name> //用于发布npm包的项目文件名 ps:一般选择自定义&#xff0c;然后不需要Vuex和Router&#xff0c;其他选项按自己实际情况选择安装即可。 2.修改原始src文件名、新增组件项目存放文件和修改…...

28 drf-Vue个人向总结-1

文章目录 前后端分离开发展示项目项补充知识开发问题浏览器解决跨域问题 drf 小tips设置资源root目录使用自定义的user表设置资源路径media数据库补充删除表中数据单页面与多页面模式过滤多层自关联后端提交的数据到底是什么jwt token登录设置普通的 token 原理使用流程解析 jw…...

线性代数(七) 矩阵分析

前言 从性线变换我们得出&#xff0c;矩阵和函数是密不可分的。如何用函数的思维来分析矩阵。 矩阵的序列 通过这个定义我们就定义了矩阵序列的收敛性。 研究矩阵序列收敛性的常用方法&#xff0c;是用《常见向量范数和矩阵范数》来研究矩阵序列的极限。 长度是范数的一个特…...

XCTF-web-easyupload

试了试php&#xff0c;php7&#xff0c;pht&#xff0c;phtml等&#xff0c;都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接&#xff0c;得到flag...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat&#xff08;I/O Statistics&#xff09;是Linux系统下用于监视系统输入输出设备和CPU使…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

浅谈不同二分算法的查找情况

二分算法原理比较简单&#xff0c;但是实际的算法模板却有很多&#xff0c;这一切都源于二分查找问题中的复杂情况和二分算法的边界处理&#xff0c;以下是博主对一些二分算法查找的情况分析。 需要说明的是&#xff0c;以下二分算法都是基于有序序列为升序有序的情况&#xf…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

九天毕昇深度学习平台 | 如何安装库?

pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子&#xff1a; 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

Linux nano命令的基本使用

参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时&#xff0c;显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...

android13 app的触摸问题定位分析流程

一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...

Oracle11g安装包

Oracle 11g安装包 适用于windows系统&#xff0c;64位 下载路径 oracle 11g 安装包...