首页 > 其他分享 >今天有点时间,想写一个小说,说说面向对象的故事,主人是人类!(一)

今天有点时间,想写一个小说,说说面向对象的故事,主人是人类!(一)

时间:2022-12-15 18:35:22浏览次数:50  
标签:set string People 主人 get HighWeight 面向对象 小说 public

一,人类的起源,及人类的爬,走,跑是怎么炼成的.

   /// <summary>
/// 一个人
/// </summary>
public class People
{
/// <summary>
/// 默认构造函数,建议要有一个
/// </summary>
public People()
{

}
/// <summary>
/// 只初始化人的姓名
/// </summary>
/// <param name="name"></param>
public People(string name)
{
this.Name = name;
}
/// <summary>
/// 只初始化人的姓名和性别
/// </summary>
/// <param name="name"></param>
/// <param name="gander"></param>
public People(string name, bool gander)
: this(name)
{
this.Gander = gander;
}
/// <summary>
/// 只和类本身有关的属性,我们把它做成静态的
/// </summary>
public static string ClassName = "人类";
/// <summary>
/// 在程序运行期间不变的做为常量
/// </summary>
public const double PI = 3.1415926;
/// <summary>
/// 姓名
/// </summary>
public string Name { get; set; }
/// <summary>
/// 性别,1为女,0为男
/// </summary>
public bool Gander { get; set; }
/// <summary>
/// 身份证
/// </summary>
public string NumID { get; set; }
/// <summary>
/// 地址
/// </summary>
public string Address { get; set; }
/// <summary>
/// 年龄
/// </summary>
public int Age { get; set; }
}
如果我们希望建立一个叫小明的人,怎么办?
People 小明 = new People("小明");
Console.WriteLine(小明.Name + 小明.Gander); //注意bool型默认为False

如果建立一个叫小红的女人,就可以这样了
People 小红 = new People("小红", true);
Console.WriteLine(小红.Name +小红.Gander);
OK,这时,我们已经建立了两个人了,我想知道它们的身高体重,怎么办?我们可以想一个人的身高和体重是每个人固有的信息,我们可以把它们放在一个结构里面,就像这样,
/// <summary>
/// 描述人的身高和体重信息的结构体
/// </summary>
public struct HighWeight
{
/// <summary>
/// 只设置身高
/// </summary>
/// <param name="height"></param>
public HighWeight(int high)
: this()
{
this.High = high;
}
/// <summary>
/// 只设置体重
/// </summary>
/// <param name="weight"></param>
public HighWeight(double weight)
: this()
{
this.Weight = weight;

}
/// <summary>
/// 对身高和体重进行初始化
/// </summary>
/// <param name="height"></param>
/// <param name="weight"></param>
public HighWeight(int height, double weight)
: this(height)
{
this.Weight = weight;
}
/// <summary>
/// 身高
/// </summary>
public int High { get; private set; } //private属性只允许类内部对本属性赋值
/// <summary>
/// 体重
/// </summary>
public double Weight { get; private set; }
}
那我们在调用时,就是这样:
HighWeight heghweight = new HighWeight(175);
Console.WriteLine("身高:{0},体重:{1}", heghweight.High, heghweight.Weight);

HighWeight heghweight2 = new HighWeight(74.4);
Console.WriteLine("身高:{0},体重:{1}", heghweight2.High, heghweight2.Weight);

HighWeight heghweight3 = new HighWeight(175,74.4);
Console.WriteLine("身高:{0},体重:{1}", heghweight3.High, heghweight3.Weight);

事实上,身高体重是属于每个人的一种特性,所以,我们应该把它放在人的类上,于是代码就变成了这样:
/// <summary>
/// 一个人
/// </summary>
public class People
{
/// <summary>
/// 默认构造函数,建议要有一个
/// </summary>
public People()
{

}
/// <summary>
/// 只初始化人的姓名
/// </summary>
/// <param name="name"></param>
public People(string name)
{
this.Name = name;
}
/// <summary>
/// 只初始化人的姓名和性别
/// </summary>
/// <param name="name"></param>
/// <param name="gander"></param>
public People(string name, bool gander)
: this(name)
{
this.Gander = gander;
}
/// <summary>
/// 只和类本身有关的属性,我们把它做成静态的
/// </summary>
public static string ClassName = "人类";
/// <summary>
/// 在程序运行期间不变的做为常量
/// </summary>
public const double PI = 3.1415926;
/// <summary>
/// 姓名
/// </summary>
public string Name { get; set; }
/// <summary>
/// 性别
/// </summary>
public bool Gander { get; set; }
/// <summary>
/// 身份证
/// </summary>
public string NumID { get; set; }
/// <summary>
/// 地址
/// </summary>
public string Address { get; set; }
/// <summary>
/// 年龄
/// </summary>
public int Age { get; set; }
/// <summary>
/// 身高和体重
/// </summary>
public HighWeight HighWeight { get; set; }
}
继承,这个概念不难理解,它是指一个具有公共对象的类被其它具有相似功能的类继承,其中被继承的类称为基类,所对应的类叫做它的子类,继承在大项目中用的不多,
因为继承会增加程序的耦合度(即类之间的相互依赖的程度).回到实例中来,所有人都会运动,无论是爬,走,还是跑,只是根据年龄不同,他们的运动所不同,看代码:
#region 方法
public virtual string Run()
{
return "刚出生的人只会爬";
}
#endregion
上面这段代码是People类的,下面是它的子类,将这个方法进行复写
/// <summary>
/// 满1岁的人
/// </summary>
public class Yang : People
{
/// <summary>
/// 调用它的父类的构造方法为父类属性赋值
/// </summary>
/// <param name="name"></param>
public Yang(string name)
: base(name)
{

}
public override string Run()
{
return "满一岁,人会走了";
}
}
下面是对类进行调用的过程:
People p = new People();
Console.WriteLine(p.Run());
Yang yang = new Yang("小孩");
Console.WriteLine("姓名:{0},它的运动:{1}", yang.Name, yang.Run());

接下来,我要说扩展方法了,顾名思义,就是定义在一个类外部的方法,但这个方法又可以作用在这个类上,看代码:
/// <summary>
/// 静态类,包括所以类的扩展方法
/// </summary>
public static class AllEvent
{
/// <summary>
/// People的扩展方法,方法和方法所在的类必须是static
/// </summary>
/// <param name="people"></param>
/// <param name="name"></param>
/// <returns></returns>
public static People GetPeopleByName(this List<People> people, string name)
{
return people.Where(i => i.Name.Equals(name)).SingleOrDefault();
}
}

调用的时候,可以直接使用它
List<People> peopleList = new List<People>()
{
new People("张三",true),
new People("李四",false),
};
Console.WriteLine(peopleList.GetPeopleByName("李四").Name);

接下来,就是一个概念性的东西, System.Nullable<T>,即可空的类型,它可以叫值类型也赋null这种值,定义如下:
Int? Pi //定义一个页签变量
Int pi=Pi ?? 1 //如果pi为空,然后将1赋值pi
1 类和结构,继承和方法复写及扩展方法及部分类
OK,我们来看一个问题,我们的人类people目前的结果如图

今天有点时间,想写一个小说,说说面向对象的故事,主人是人类!(一)_扩展方法

看起来,有点乱了,我们想把它的方法和属性分开,这样做,有两个好像,第一代码清晰,第二也是引用部分类partial的作用,就是有利于团队开发.(check in  and check out )如图:

今天有点时间,想写一个小说,说说面向对象的故事,主人是人类!(一)_High_02

到些,第一讲就完了!好累呀!

作者:仓储大叔,张占岭,
荣誉:微软MVP

标签:set,string,People,主人,get,HighWeight,面向对象,小说,public
From: https://blog.51cto.com/u_15765017/5945636

相关文章

  • 大家一起来学习一下面向对象的三层架构吧!今天我来说说Entity有时也叫MODEL实体层!
    实体层,事实上就是数据库的对象化,把数据表抽象化,目前有很多这方面的工具,我们把这些工具称为ORM工具,即对象关系模型,microsoft在进入3.5时代后引入了LINQ的概念,LINQ的出......
  • 面向对象总结
                        面向对象都有哪些特性以及你对这些特性的理解继承:继承是从已有类得到信息创建新类的过程。提供信息的类被称为父类(超类,基类);得到......
  • python-面向对象
    1.概述1.1面向过程定义:分析出解决问题的步骤,然后逐步实现。例如:婚礼筹办--请柬(选照片、措词、制作)--宴席(场地、找厨师、准备桌椅餐具、计划菜品、购买食材)--仪式(定......
  • 【小说网站 - 抓取登陆后的数据,cookie操作】
    今天搞一个小说网站,搞到一些只能登陆后才能获得的信息,比如这个网站,搞到某个用户下的所有书架信息。先登录上面是一个表单,一般都是post了一些数据到某个地址,于是我们可以通......
  • 14-咸鱼学Java-面向对象基础:类
    类类就相当于自定义类型,有自己的数据域,有自己的方法。属于一种用户自定义类型。类的目的就是模拟现实中存在的物体,如一个Person类,一个人他有自己的名字,年龄,性别等等,他有自己......
  • 面向对象编程
    面向对象编程Java的核心思想是oop初识面向对象方法的回顾与加深对象的创建分析面向对象的三大特性抽象类和接口内部类及oop实战面向过程&面向对象......
  • Java面向对象2
    封装性    封装就是保护内容,保证某些属性或方法可以不被外部看见,而在内部自己去处理。 classPerson{Stringname;intage;publicvoidtell(){System.out......
  • Java面向对象1
     程序的发展阶段程序的发展经历了两个主要阶段:面向过程、面向对象。对于面向对象与面向过程可以用一个例子解释,如一个木匠要做一个盒子,那么做这个盒子的出发点会有两种......
  • java和vue开发的电子书系统自动检测敏感词小说网站
    简介电子书系统,注册用户上传txt,系统自动检测敏感词汇并且自动生成章节。管理员审核电子书,管理电子书分类和用户,评论等。注册用户可以搜索浏览电子书,在线阅读和下载电子书。......
  • 【Unity】 HTFramework框架(三十六)AssetsMaster资源管理器,做资产的主人
    更新日期:2020年8月13日。Github源码:​​​[点我获取源码]​​​Gitee源码:​​[点我获取源码]​​索引​​AssetsMaster​​​​使用AssetsMaster​​​​打开AssetsMaster......