本篇博客对应视频讲解

回顾

我们在第一篇文章中讲了编程中最基本的内容,如输入输出、字符串处理、数字类型计算、分支及循环结构等。无论学习什么语言,这些内容都是相通的。

本篇博客主要演示列表(List)的用法以及面向对象中类的概念,通过一个具体的实例去向大家展示如何对现实对象抽象,创建类,以及如何使用它。

理论基础

我们可以通过官方文档中的解释先初步理解一下列表、类、对象等概念。然后我们通过实际的代码示例,通过自己动手编写去亲身体会一下。

理解面向对象编程

关于面向对象的编程,我们可以通过官方文档中的解释来做初步的理解。
文档中介绍了以下概念:
类和对象
继承
接口
泛型
委托

我们当前只需要对类和对象有个初步的理解即可。点击查看完整文档

单纯讲概念是没用的,但没有理论基础也难以形成知识体系,触类旁通。所以,建议大家先总体看一遍文档内容,脑海中有个印象,然后通过我们的视频实例和自己动手实践去亲自体会,之后再看文档的时候,也许就会理解其内容了。

动手实践

  1. 列表List
         //定义List
List<string> list = new List<string>();
//添加值
list.Add("Black");
list.Add("White");
list.Add("Orange");
list.Add("Red");
list.Add("Blue"); //遍历输出
foreach (var item in list)
{
Console.Write(item + " ");
}
Console.WriteLine(); //数列示例
var fibonacciNumbers = new List<int> { 1, 1 };
while (fibonacciNumbers.Count < 20)
{
//取出最后两个值
var previous = fibonacciNumbers[fibonacciNumbers.Count - 1];
var previous2 = fibonacciNumbers[fibonacciNumbers.Count - 2];
//添加到列表
fibonacciNumbers.Add(previous + previous2);
}
//遍历输出
foreach (var item in fibonacciNumbers)
Console.WriteLine(item);
  1. 类和对象
    定义英雄类:
 class Hero
{
/// <summary>
/// 名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 武器
/// </summary>
public string Weapon { get; set; }
/// <summary>
/// 血量
/// </summary>
public int HP { get; set; } public Hero(string name, int Hp)
{
Name = name;
HP = Hp;
Console.WriteLine($"{name}登场!拥有[{Hp}]血量");
} /// <summary>
/// 攻击
/// </summary>
/// <param name="target"></param>
public void Attack(string target, int damage = 0)
{
Console.WriteLine($"[{Name}]使用[{Weapon}]攻击了[{target}],造成了[{damage}]点伤害");
Console.WriteLine();
}
}

创建实例,使用类实例

         //设置英雄库及武器库
string[] heroNames = { "钢铁侠", "蝙蝠侠", "美队", "超人" };
string[] weapons = { "拖鞋", "拳头", "棍棒", "机枪" }; //创建英雄队列
var heros = new List<Hero>();
var random = new Random(); //英雄登场,配置武器
foreach (var item in heroNames)
{
var hero = new Hero(item, random.Next(60, 120));
hero.Weapon = weapons[random.Next(0, 4)]; heros.Add(hero);
} //大混战
while (heros.Count > 1)
{
var position = random.Next(0, heros.Count);
var target = random.Next(0, heros.Count);
if (position != target)
{
int damage = random.Next(16, 32);
heros[position].Attack(heros[target].Name, damage);
heros[target].HP = heros[target].HP - damage; if (heros[target].HP < 0)
{
Console.WriteLine(heros[target].Name + "已阵亡");
heros.Remove(heros[target]);
}
}
Thread.Sleep(500);
} Console.WriteLine($"最后的胜者为:[{heros[0].Name}].还有[{heros[0].HP}]血量");

以上代码是我们今天示例中的代码。我们也可以通过github上去下载完整项目代码。
建议大家同时观看视频,视频中会有更详细的说明以及操作演示。

2-初步了解C#-类与对象的更多相关文章

  1. 非常易于理解‘类'与'对象’ 间 属性 引用关系,暨《Python 中的引用和类属性的初步理解》读后感

    关键字:名称,名称空间,引用,指针,指针类型的指针(即指向指针的指针) 我读完后的理解总结: 1. 我们知道,python中的变量的赋值操作,变量其实就是一个名称name,赋值就是将name引用到一个 ...

  2. python的类和对象——进阶篇

    写在前面的话 终于,又到了周五.当小伙伴们都不再加班欢欢喜喜过周末的时候,我刚刚写完这一周的游戏作业,从面对晚归的紧皱眉头到现在的从容淡定,好像只有那么几周的时间.突然发现:改变——原来这么简单.很多 ...

  3. 类和对象:面向对象编程 - 零基础入门学习Python037

    类和对象:面向对象编程 让编程改变世界 Change the world by program 经过上节课的热身,相信大家对类和对象已经有了初步的认识,但似乎还是懵懵懂懂:好像面向对象编程很厉害,但不 ...

  4. C++类继承中,基类/当前对象属性/当前对象的构造顺序

    [1]中提到,规范的派生类构造函数三个要点: 首先创建基类对象 应通过成员初始化列表,创建基类对象 应该初始化本派生类新增的成员变量 那在构造派生类实例的过程中,其基类(以及多继承的时候多个基类)/当 ...

  5. Python小白学习之路(五)—【类和对象】【列表】【列表相关功能】

    类和对象 (简单的了解一下这个概念,初步有个印象,这个概念很重要,后面会着重讲) 类:具有相同属性和方法的对象的集合: 对象:万物皆对象: 概念很抽象(每当我看不到概念的时候,我就会通过举例来理解) ...

  6. 关于Java构造类与对象的思考

    简单记录一下Java构造类与对象时的流程以及this和super对于特殊例子的分析. 首先,接着昨天的问题,我做出了几个变形: Pic1.原版: Pic2.去掉了T.foo方法中的this关键字: P ...

  7. 菜鸡的Java笔记 第十 - java 类与对象

    (局部变量需要初始化,全局变量不初始化系统也会帮忙初始化而局部变量系统不会帮忙初始化)>>>    2.1 类与对象基本概念        在现实生活之中,类指的就是具备某一共性的群 ...

  8. Java编程里的类和对象

    像我们搞计算机这块的,都知道这么一件事,当前的计算机编程语言主要分为两大块,一为面向过程,二为面向对象.Java就是一门纯面向对象的语言.学习了一个月左右的Java,在下对于Java当中的类和对象有了 ...

  9. Python - 类与对象的方法

    类与对象的方法

随机推荐

  1. mysql总结(三)

    select distinct * from 表名where ...group by ...having ...order by ...limit ... 关系的问题(1)是什么样的对应关系(2)存储 ...

  2. 551. Student Attendance Record I + Student Attendance Record II

    ▶ 一个学生的考勤状况是一个字符串,其中各字符的含义是:A 缺勤,L 迟到,P 正常.如果一个学生考勤状况中 A 不超过一个,且没有连续两个 L(L 可以有多个,但是不能连续),则称该学生达标(原文表 ...

  3. D3D-GetBackBuffer &GetFrontBufferData 抓屏&D3D抓取GPU数据

    HRESULT GetBackBuffer( [in]          UINT                iSwapChain, [in]          UINT              ...

  4. Notepad++中的高级查找

      准备以下字符串用来演示 abcdeab cdeabcde abcd eabcde   基于扩展的查找 基于扩展的查找不能算是真正的正则表达式搜索,因此这种查找方式仅是提供了支持转义字符.主要常用的 ...

  5. Spring Boot gradle 集成servlet/jsp 教程及示例

    1.build.gradle 配置 注意,加入了war插件,在依赖中加入了jstl.tomcat-embed-jasper,这样才能运行jsp页面. buildscript { ext { sprin ...

  6. c语言静态断言

    在php中可以通过xdebug来显示详细的错误信息,可以细化到哪个文件哪行代码引起的报错.在C语言里面也可以通过静态断言(assert)来使得调试代码更加方便.关于断言,可以作为一种很强大的调试方式或 ...

  7. Step By Step Hibernate Tutorial Using eclipse WTP[z]

     [shivasoft.in/blog/sql/myqsl/step-by-step-hibernate-tutorial-using-eclipse-wtp/] Hibernate is the O ...

  8. TLB与内存寻址,内存读取,虚拟内存的相关原理

    TLB(Translation Lookaside Buffer)转换检测缓冲区是一个内存管理单元,用于改进虚拟地址到物理地址转换速度的缓存. TLB是一个小的,虚拟寻址的缓存,其中每一行都保存着一个 ...

  9. null与not null

    .not null CREATE TABLE `test` ( `col1` VARCHAR( ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NUL ...

  10. [SoapUI]怎样运用Schema通过*.xsd文件来验证response对应的xml文件

    添加Groovy Script脚本对Test Step进行验证 脚本如下(已经运行通过): import javax.xml.XMLConstants import javax.xml.transfo ...