文章目录

  • 结构的使用
  • 枚举
  • 面向对象概述
  • 类与对象的关系
  • 类的声明
  • 属性的使用
  • 构造函数与析构函数
  • 类的继承
  • 类的封装
  • 类的多态
  • 本章小结及任务实施

结构的使用


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace _9._1结构的使用
{//最好将结构声明与此位置,所有的类都可以访问public struct Clerk{//声明变量public string name;public int age;public string departmet;public char gender;}class Program{static void Main(string[] args){Clerk zs = new Clerk();zs.name = "张三";zs.age = 25;zs.departmet = "人力资源部";zs.gender = '男';Console.WriteLine("我叫{0},我的年龄是{1},我在{2}工作,我是一个{3}生", zs.name, zs.age, zs.departmet, zs.gender);Console.ReadKey();}}
}

结果:

我叫张三,我的年龄是25,我在人力资源部工作,我是一个男生

枚举




using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace _9._2枚举
{//在此处声明枚举,它与结构的作用很类似,所以位置一样,但同时枚举可以在结构中被调用public enum Gender{男,女}public enum Week{星期一=0,//不认为指定的话,从0开始星期二,星期三,星期四,星期五,星期六=10,//认为指定则顺序+1星期日}class Program{static void Main(string[] args){Gender zsgender = Gender.男;//(int)实现将整型转换为枚举Console.WriteLine((int)zsgender);Week myWorkDay = Week.星期三;Console.WriteLine(myWorkDay);int a = 10;//(枚举名)实现将整型转换成枚举Console.WriteLine((Week)a);//将枚举转换成字符串,使用myWorkDay.ToString();Convert.ToString(myWorkDay)//将字符串转换成枚举string mystr2 = "星期五";Console.WriteLine((Week)Enum.Parse(typeof(Week), mystr2));//如果需要转换的字符串不是数字,而且枚举值中不含有该值,则报错//如果需要转换的字符串是数字,且不包含该值,但不报错Console.ReadKey();}}
}

结果:

0
星期三
星期六
星期五

面向对象概述



类与对象的关系

类的声明


声明类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace _9._5类的声明
{public enum Gender{男,女}class Clerk{//方法中可以存放字段、属性、方法public string _name;//字段,命名规范,_cameCase//字段,可以存放多个值,变量只能存放一个值,字段是用来存放数据的               public Gender _gender;public int _age;public string _department;public int _workYears;//静态方法只能调用静态成员//非静态方法可以调用任何成员public  void Write()//方法{Console.WriteLine("我叫{0},我是{1}生,我{2}岁了,我在{3}就职,我工作了{4}年",this._name, this._gender, this._age, this._department, this._workYears);}}
}

在主程序中调用类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace _9._5类的声明
{class Program{static void Main(string[] args){//将类实例化,就是将类指定给某个对象Clerk zsClerk = new Clerk();zsClerk._name = "张三";zsClerk._gender = Gender.男;zsClerk._age = 25;zsClerk._department = "人力部";zsClerk._workYears = 5;//调用非静态方法zsClerk.Write();//实例化//可以存放多个值Clerk lsClerk = new Clerk();lsClerk._name = "李四";lsClerk._gender = Gender.女;lsClerk._age = 35;lsClerk._department = "销售部";lsClerk._workYears = 8;lsClerk.Write();Console.ReadKey();}}
}

结果:

我叫张三,我是男生,我25岁了,我在人力部就职,我工作了5年
我叫李四,我是女生,我35岁了,我在销售部就职,我工作了8年

属性的使用


创建类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace _9._6属性的使用
{class Clerk{private string _name;//字段,命名规范,_cameCasepublic string Name{get;//自动属性set;}//字段,可以存放多个值,变量只能存放一个值,字段是用来存放数据的               private char _gender;public char Gender{get{if (_gender != '男' || _gender != '女')  _gender = '男';return _gender;}set { _gender = value; }}private  int _age;//通常给将get、set称为访问器//属性分为4种//1)既读又写,同时包含get、set//2)只读,只包含get//3)只写,只包含set//4)自动 get;set;public int Age{get { return _age; }//get可以对取值进行限定set{if (value < 0 || value > 120) value = 0;_age = value;}//set可以对赋值进行限定  }//有了属性后,我们往往都通过属性来访问字段//属性通常申明为public  字段声明private//在外部访问类中的字段,都是通过属性来实现的private string _department;public string Department{get;set;}private int _workYears;public int WorkYears{get;set;}//静态方法只能调用静态成员//非静态方法可以调用任何成员public void Write()//方法{Console.WriteLine("我叫{0},我是{1}生,我{2}岁了,我在{3}就职,我工作了{4}年", this.Name, this.Gender, this.Age, this.Department, this.WorkYears);}}
}

在主程序中调用类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace _9._6属性的使用
{class Program{static void Main(string[] args){Clerk zsClerk = new Clerk();zsClerk.Name = "张三";zsClerk.Gender = '男';zsClerk.Age  = 25;zsClerk.Department = "人力部";zsClerk.WorkYears = 5;//调用非静态方法zsClerk.Write();Console.ReadKey();}}
}

结果:

我叫张三,我是男生,我25岁了,我在人力部就职,我工作了5年

构造函数与析构函数


创建类和构造函数(创建类,写字段、属性、构造函数、方法)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace _9._8构造函数与析构函数
{class Clerk{private string _name;public string Name{get { return _name; }set { _name = value; }}private char _gender;public char Gender{get { return _gender; }set { _gender = value; }}private int _age;public int Age{get { return _age; }set { _age = value; }}private string _department;public string Department{get { return _department; }set { _department = value; }}public void Write(){Console.WriteLine("我叫{0},我是{1}生,我{2}岁了,我在{3}任职", this.Name, this.Gender, this.Age, this.Department);}public void Write2(){Console.WriteLine("我叫{0},我是{1}生,我{2}岁了", this.Name, this.Gender, this.Age);}public Clerk(string name,char gender,int age,string department)//构造函数必须和类同名{this.Name = name;this.Gender = gender;this.Age = age;this.Department = department;}public Clerk(string name, char gender, int age)//构造函数必须和类同名{this.Name = name;this.Gender = gender;this.Age = age;}}
}

在主函数中调用(声明构造函数,调用方法)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace _9._8构造函数与析构函数
{class Program{static void Main(string[] args){Clerk zsClerk = new Clerk("张三", '男', 25, "开发部");zsClerk.Write();Clerk lsClerk = new Clerk("李四", '女', 30);lsClerk.Write2();Console.ReadKey();}}
}

结果:

我叫张三,我是男生,我25岁了,我在开发部任职
我叫李四,我是女生,我30岁了


类的继承





父类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace _9._10类的继承
{class Clerk{private string _name;//字段//privata由于私有,不能被子类访问public string Name//属性{get { return _name; }set { _name = value; }}private string _department;public string Department{get { return _department; }set { _department = value; }}//构造函数//子类中不能继承父类中的构造函数,但是会默认地调用父类中的无参的构造函数//两种方法//1)在父类中再写一个无参的构造函数,在每个子类当中都需要再进行一次构造函数的重写与各个字段的初始化//2)使用关键字:base()public Clerk(string name, string department){this.Name = name;this.Department = department;}//public Clerk()//{//}public void CSayHello(){Console.WriteLine("大家好,我是{0}的{1}", this.Department, this.Name);}}
}

子类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace _9._10类的继承
{//继承于Clerkclass Sales:Clerk{//private string _name;new关键字可以用来隐藏基类中同名的成员new实例化对象//public new string Name { get => _name; set => _name = value; }private int _salesTarget;public int SalesTarget { get => _salesTarget; set => _salesTarget = value; }//public Sales(string name,string department,int salasTarget)//{//    this.Name = name;//    this.Department = department;//    this.SalesTarget = salasTarget;//}public Sales(string name, string department, int salasTarget):base(name,department){this.SalesTarget = salasTarget;}public void SSayHello(){Console.WriteLine("大家好,我是{0}的{1},我的销售目标是{2}", this.Department, this.Name, this.SalesTarget);}}
}

子类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace _9._10类的继承
{class TechnicalSupport:Clerk{private double _satisfactionRate;public double SatisfactionRate { get => _satisfactionRate; set => _satisfactionRate = value; }public TechnicalSupport(string name,string department,double satisfactionRate):base(name,department){this.SatisfactionRate=satisfactionRate;}public void TTSayHello(){Console.WriteLine("大家好,我是{0}的{1},我的服务满意率为{2}", this.Department, this.Name, this.SatisfactionRate);}}
}

主函数

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace _9._10类的继承
{class Program{static void Main(string[] args){Clerk zsClerk = new Clerk("张三", "人事部");//使用构造函数调用zsClerk.CSayHello();Sales zsSales = new Sales("张三","人事部",2500);zsSales.SSayHello();TechnicalSupport zsTC = new TechnicalSupport("张三", "人事部", 0.98);zsTC.TTSayHello();Console.ReadKey();}}
}

类的封装

public跨项目也能使用,需要引用和using


跨项目对类进行访问时需要将类使用public公开,引用原项目,使用using 对原项目的名字进行调用

类的多态




实例一:需要使用虚方法 Clerk,ProjectManager
实例二:需要使用抽象方法Drink,Milk,Tea
实例一类代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace _9._13类的多态
{class Clerk{public virtual void WorkPlan()//虚方法{Console.WriteLine("我是职员,我需要有工作计划");}}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace _9._13类的多态
{class ProjectManager:Clerk{public override void WorkPlan()//{Console.WriteLine("我是项目经理,我也需要工作计划");}}
}

实列二类代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace _9._13类的多态
{abstract class Drink{public abstract void drink();//利用抽象来实现,类抽象化,方法抽象化,并且方法中不能有方法体{}//{//    Console.WriteLine("我是饮料,我可以解渴");//}}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace _9._13类的多态
{class Milk:Drink{public override void drink(){Console.WriteLine("我是牛奶,我可以解渴");}}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace _9._13类的多态
{class Tea:Drink{public override void drink(){Console.WriteLine("我是茶,我可以解渴");}}
}

主程序(注释掉的为实例一主程序代码)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace _9._13类的多态
{class Program{static void Main(string[] args){//Clerk myClerk = new Clerk();//ProjectManager myPM = new ProjectManager();myClerk.WorkPlan();myPM.WorkPlan();//Clerk[] clerk = { myClerk, myPM };//foreach (Clerk outclerk in clerk)//{//    outclerk.WorkPlan();//}//Drink mydrink = new Drink();//错误,抽象类是不允许创建实例的Drink myMlik = new Milk();Drink myTea = new Tea();//myMlik.drink();//myTea.drink();Drink[] drink = { myMlik, myTea };foreach(Drink outdrink in drink){outdrink.drink();}Console.ReadKey();}}
}

本章小结及任务实施


本例子中只有三类动物,为了实现类的多态性就需要抽象出一个鸟类为父类,因为鸟类本身没有及进行实例化所以使用抽象方法。

父类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace _9._14本章小结及任务实施
{abstract class Bird{public abstract void Write();}
}

派生类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace _9._14本章小结及任务实施
{class Eagle:Bird{public override  void Write(){Console.WriteLine("老鹰吃小鸡");}}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace _9._14本章小结及任务实施
{class Sparrow:Bird{public override void Write(){Console.WriteLine("麻雀吃粮食");}}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace _9._14本章小结及任务实施
{class Ostrich:Bird{public override void Write(){Console.WriteLine("鸵鸟吃青草");}}
}

主程序

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace _9._14本章小结及任务实施
{class Program{static void Main(string[] args){Bird myEagle = new Eagle();//抽象类在抽象的时候不能使用抽象的名称进行实例化,只能根据对应的派生类进行实例化Bird mySparrow = new Sparrow();Bird myOstrich = new Ostrich();Bird[] myBird = { myEagle, mySparrow, myOstrich };foreach(Bird outBird in myBird){outBird.Write();}Console.ReadKey();}}
}

结果:

老鹰吃小鸡
麻雀吃粮食
鸵鸟吃青草

C#9结构、类与属性相关推荐

  1. swift. 扩展类添加属性_swift中的声明关键字详解

    原起 学习swift,swift中的关键字当然要了解清楚了,最近在网上看到了关于声明关键字的文章,整理记录一下. 关键字是类似于标识符的保留字符序列,除非用重音符号(`)将其括起来,否则不能用作标识符 ...

  2. mybatisplus修改单个属性_第二节 官封弼马温——类的属性

    <西游记>第2集 官封弼马温 美猴王战胜了混世魔王,花果山上喜气洋洋,小猴们每日操演武艺,十分快乐.悟空闯入东海龙宫,向龙王索取镇海神针--如意金箍棒.这棒虽重一万三千五百斤,却大可撑天着 ...

  3. odoo13中的模型类(模型属性、字段属性、字段类型)

    目录 1.模型属性 2.字段类型 3.字段通用参数属性 1.模型属性 模型属性 解释 _name 模型名称.使用点表示法.规范命名带模块命名空间,格式:模块名.xxx.xxx.xxx: _descri ...

  4. Django框架(10.Django中的模型类的定义以及模型类字段属性和选项)

    Django中的模型类的定义以及模型类字段属性和选项 1.模型类的定义 2.模型类属性命名限制 2.1字段类型和属性 2.2选项 1.模型类的定义 ORM:表就代表类,字段代表属性 模型类需要继承自m ...

  5. matlab在振动信号处理中的应用_Matlab面向对象程序设计及其在地球物理学中的应用(4)——类的属性

    参考资料 徐潇,李远. MATLAB面向对象编程--从入门到设计模式(第一版) 程序实现 Matlab 2019a 地球物理局 信息化处 地球物理局 基建处 数值计算科声明: # 欢迎批评指正,禁止转 ...

  6. java未知对象调用其某个方法_引用一个类的属性或调用其方法,必须以这个类的对象为前缀。...

    [多选题]根据<建设工程项目管理规范>(GB/T50326-20 17 )施工项目经理应履行的职责有( ) [判断题]数组作参数被使用时,数组名后必须加方括号 [判断题]方法中最多能有一个 ...

  7. php类3个属性是哪3种,PHP获取类私有属性的3种方法

    今天在推上看到一条获取php类私有属性的推文,感觉很有意思: 顺着推文联想,还有其他方式吗?经过自己的测试及网上答案,总结出三种方法: 1. 反射 反射可以获取类的详细信息,要获取私有属性的值,只需将 ...

  8. 语法基础(三. 类,属性,方法,方法重载,方法重写,构造方法,访问修饰符)

    语法基础(三. 类,属性,方法,方法重载,方法重写,构造方法,访问修饰符) (如有错误,欢迎指正,感谢!) 类 类是面向对象的程序设计中的概念,实现信息的封装 概念: 类就是拥有相等行为和相同的属性的 ...

  9. 你要偷偷学Python,然后惊艳所有人(类的属性和方法)

    一.类的结构 1.1:术语--实例 1.使用面向对象开发,第一步是设计类 2.使用类名()创建对象,创建对象的动作有两步 1)在内存中为对象分配空间2)调用初始化方法__init__为对象初始化 3. ...

  10. 软件方法(下)第8章分析之分析类图—知识篇Part09-审查类和属性1

    可到此处下载<软件方法>(下)目前公开的最新pdf版本: http://www.umlchina.com/book/softmeth2.pdf 8.2.5 审查类和属性 8.2.5.1 属 ...

最新文章

  1. php5.5 反序列化利用工具_记一次Spring Devtools反序列化利用
  2. 异构计算架构师眼中的AI算法(object detection)
  3. python模块大全使用说明_python模块详解
  4. git: command not found
  5. 苹果电脑快捷键有哪些?mac系统快捷键大全详细介绍(全部)_苹果MAC_操作系统_脚本之家
  6. 中间件中渲染Razor视图
  7. Adobe Experience Design是什么软件?xd mac版下载安装教程 XD 2021发布
  8. Linux入门之磁盘管理(3)文件系统挂载
  9. 2015年10月26日作业
  10. 前台传JSON到后台
  11. hadoop+hive+hbase+spark补充内容
  12. I.MX6 CAAM
  13. mysql postgresql nav_Mysql/postgreSQL
  14. 基于深度学习的人脸表情识别实现
  15. linux下mysql将表导出_linux下mysql导出数据表命令
  16. 马小云:利用信息差赚钱的暴利创业项目 ,批量开店月入3万
  17. 工程师结婚还要加班,都是鹿晗干的好事
  18. python三重积分_(整理)三重积分及其计算和多重积分72254.
  19. pom.springmvc.psring-contect自用常用文件配置
  20. iPhone/iPad的IAP防破解之第三方服务器二次验证

热门文章

  1. shiro教程1(HelloWorld)
  2. FOTRIC 692Pro红外热成像仪 人体体温筛查
  3. Vert.x(vertx) 创建HTTP服务
  4. C语言实现 百钱百鸡
  5. Java中获取日期和时间
  6. JSP——连接数据库、编写api接口
  7. DynamoDB初体验
  8. 认认真真推荐 10 个优质自学平台
  9. 文件操作之特殊文件操作
  10. Python爬虫 | 利用python爬虫获取想要搜索的数据