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.xdnf.cn/news/145393.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

java生成PDF的Util

java使用itext生成pdf-CSDN博客 接上文 支持绘制表格 支持表格中的文本 字体加粗、字体上色、单元格背景上色, 支持拼接文本 支持单行文本 多种背景颜色、字体上色 支持自定义水印 废话不说先上效果图 工具类代码 package com.zxw.文件.PDF.util;import com.…

Stm32_标准库_5_呼吸灯_按键控制

Stm32按键和输出差不多 PA1为LED供给正电,PB5放置按键,按键一端接PB5,另一端接负极 void Key_Init(void){RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //APB2总线连接着GPIOBGPIO_InitStructur.GPIO_Mode GPIO_Mode_IPU;GPIO_InitStructur.…

Kafka:介绍和内部工作原理

展示Kafka工作方式的简单架构。 什么是Kafka?为什么我们要使用它?它是消息队列吗? •它是一个 分布式流处理平台或分布式 提交日志*。*•Kafka通常用于实时流数据管道,即在系统之间传输数据,构建不断流动的数据转换系统…

什么是GraphQL?它与传统的REST API有什么不同?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 什么是GraphQL?⭐ 与传统的REST API 的不同⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣…

Konva基本处理流程和相关架构设计

前言 canvas是使用JavaScript基于上下文对象进行2D图形的绘制的HTML元素,通常用于动画、游戏画面、数据可视化、图片编辑以及实时视频处理等方面。基于Canvas之上,诞生了例如 PIXI、ZRender、Fabric、Konva等 Canvas渲染引擎,兼顾易用的同时…

DataBinding双向绑定简介

一、简介 在Vue中使用的是MVVM架构。通过ViewModel可以实现M层和V层数据的双向绑定。Model层的数据发生变化后,会自动更新View层UI。UI层数据发生变化(用户输入),可以驱动Model层的数据发生变化,借助于Vue框架中的View…

Spring cloud Sentinel介绍和安装

Sentinel介绍和安装 🌈初识Sentinel🌈安装Sentinel🌠docker 安装🌠下载sentinel镜像🌠启动sentinel镜像 🌠windows 安装🌠下载🌠运行 🌠sentinel访问 🌈微服务…

React 全栈体系(十四)

第七章 redux 六、react-redux 7. 代码 - react-redux 数据共享版 7.1 效果 7.2 App /* src/App.jsx */ import React, { Component } from "react"; import Count from "./containers/Count"; import Person from "./containers/Person";ex…

26947-2011 手动托盘搬运车 学习记录

声明 本文是学习GB-T 26947-2011 手动托盘搬运车. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了手动托盘搬运车(以下简称托盘车)的结构参数、技术要求、试验方法、检验规则、 标志、包装、运输和贮存。 本标准适用于额定载荷…

【数据结构--八大排序】之冒泡排序+选择排序+插入排序

💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …

2023彩虹全新SUP模板,知识付费模板,卡卡云模板

源码介绍: 2023彩虹全新SUP模板/知识付费模板/卡卡云模板,首页美化,登陆页美化,修复了pc端购物车页面显示不正常的问题。 请自行查毒。感觉彩虹不少源码可能都有不干净的东西 安装教程: 1.将这俩个数据库文件导入数据…

2023.09.30使用golang1.18编译Hel10-Web/Databasetools的windows版

#Go 1.21新增的 log/slog 完美解决了以上问题,并且带来了很多其他很实用的特性。 本次编译不使用log/slog 包 su - echo $GOPATH ;echo $GOROOT; cd /tmp; busybox wget --no-check-certificate https://go.dev/dl/go1.18.linux-amd64.tar.gz;\ which tar&&am…

Java on Azure Tooling 8月更新|以应用程序为中心的视图支持及 Azure 应用服务部署状态改进

作者:Jialuo Gan - Program Manager, Developer Division at Microsoft 排版:Alan Wang 大家好,欢迎阅读 Java on Azure 工具的八月更新。在本次更新中,我们将推出新的以应用程序为中心的视图支持,帮助开发人员在一个项…

Python计算巴氏距离

Python计算巴氏距离 巴氏距离简介 在统计中,巴氏距离(Bhattacharyya Distance)测量两个离散或连续概率分布的相似性。它与衡量两个统计样品或种群之间的重叠量的巴氏系数密切相关。巴氏距离和巴氏系数以20世纪30年代曾在印度统计研究所工作…

<Xcode> Xcode IOS无开发者账号打包和分发

关于flutter我们前边聊到的初入门、数据解析、适配、安卓打包、ios端的开发和黑苹果环境部署,但是对于苹果的打包和分发,我只是给大家了一个链接,作为一个顶级好男人,我认为这样是对大家的不负责任,那么这篇就主要是针…

解决WIFI网络登录困难的方法

当你遇到手机WIFI网络在连接成功后,总是提示网络受限或者当前网络无法连接互联网,但过一段时间后它又自动恢复正常的的问题,可以尝试用以下方法来解决。 第一步:打开WLAN连接设置界面,选择“更多设置” 第二步&#x…

分类预测 | MATLAB实现NGO-CNN北方苍鹰算法优化卷积神经网络数据分类预测

分类预测 | MATLAB实现NGO-CNN北方苍鹰算法优化卷积神经网络数据分类预测 目录 分类预测 | MATLAB实现NGO-CNN北方苍鹰算法优化卷积神经网络数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现NGO-CNN北方苍鹰算法优化卷积神经网络数据分类预测&…

c语言常用语法,长时间不用容易忘。

关键字 auto 声明自动变量const 定义常量,如果一个变量被 const 修饰,那么它的值就不能再被改变extern 声明变量或函数是在其它文件或本文件的其他位置定义register 声明寄存器变量signed 声明有符号类型变量或函数static 声明静态变量,修饰…

c#中的接口

使用IEnumerable统一迭代变量类型 class Program {static void Main(string[] args){int[] nums1 new int[] { 1, 2, 3, 4, 5 };ArrayList nums2 new ArrayList { 1, 2, 3, 4, 5 };Console.WriteLine(Sum(nums1));Console.WriteLine(Sum(nums2));Console.WriteLine(Avg(nums…

Windows系统利用cpolar内网穿透搭建Zblog博客网站并实现公网访问内网!

文章目录 1. 前言2. Z-blog网站搭建2.1 XAMPP环境设置2.2 Z-blog安装2.3 Z-blog网页测试2.4 Cpolar安装和注册 3. 本地网页发布3.1. Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 1. 前言 想要成为一个合格的技术宅或程序员,自己搭建网站制作网页是绕…