结构体:相当于是我们自己定义的一种复杂的类型。
int... double float bool char string DateTime 数组类型
生活中大部份的对象都是复合型的对象。

如何定义结构体类型?
一般来说结构体的定义要放在class的外面或class的里面,尽量不放在Main的里面。
struct 自定义类型名
{
public 变量类型 变量名;
......;
......;
......;

}
例如:
struct YuanGong //自定义的数据类型。用来描述员工的信息。
{
public string NO;
public string Name;
public int Age;
public string Nation;
public bool Sex;
}

如何用自定义的类型来定义变量?
自定义类型名 变量 = new 自定义类型名();

如何使用自定义类型的变量?
变量.子变量 = "xxxx";
Console.WriteLine(变量名.子变量);
例如:
//定义自定义类型的变量
YuanGong zhangsan = new YuanGong();
//给变量赋值
zhangsan.NO = "Y001";
zhangsan.Name = "张三";
zhangsan.Age = 22;
zhangsan.Sex = true;
zhangsan.Nation = "汉族";
//对变量取值
Console.WriteLine(zhangsan.NO+"\t"+zhangsan.Name+"\t"+zhangsan.Age);
Console.WriteLine(zhangsan.Nation+"\t"+(zhangsan.Sex?"男":"女"));

********************************************************************************************************

1> 结构和类特别相似,在结构中可以定义字段,方法,属性,构造函数。(因为结构是在C中传承下来的,而C是面向过程的)

2> 结构体也需要创建对象来对结构中的成员进行调用,与类的区别是结构体可以通过new关键字来创建,也可以不通过new关键字来创建,声明一个结构类型的变量就可以了,

这个变量就是一个对象(结构只是与类非常相似并不是一样,还是有语法区别的)。通过对象名点成员来调用。

3> 声明语法:

[访问修饰符] struct 结构名称

{

结构成员;
               }

4> 结构和类的区别:

a. 类是class声明 结构体是struct声明

b. 结构体中虽然可以声明字段,但是声明字段的同时不能给字段赋值.否则报错。

c. 结构体中虽然可以定义构造函数,但是你不能写1个无参数的构造函数. 因为无论如何 编译器多会为结构体生成1个无参数的构造函数.

d. 在结构体的构造函数中,必须要为这个结构体对象的每一个字段赋值.

e. 在创建结构体对象的时候. 可以使用new关键字来创建. 但是我也可以不使用new关键字. 使用new关键字来创建对象: 结构体中所有的字段就已经有值了.可以直接使用. 不使用new关键创建对象:

结构体中的字段没有值,所以在使用字段的值之前 必须要为字段赋值. 原因在于: 使用new关键字创建对象 调用了构造函数,而结构体的构造函数要求必须为所有的字段赋值, 哪怕是它自己生成的无

参数的构造函数(为所有的字段赋默认值). 所以使用new关键字创建结构体对象 这个结构体对象的所有的字段都已经有值了. 如果直接声明1个结构体变量而不使用new关键字,没有调用构造函数,

所以字段也就没有值.

f. 在构造函数中为属性赋值,编译器不认为是在对字段赋值,因为属性不一定是在操作字段。

g. 结构体是1个值类型.类是1个引用类型.

5> 结构体是一个值类型. 在创建结构体对象的时候,结构体对象直接存储在变量中. 结构体变量之间相互赋值的时候,是逐个拷贝字段的值.

********************************************************************************************************

对战游戏

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace ConsoleApplication1
{
struct Ren
{
public string Name;
public int Blood;
public int Attack;
public int Defend; }
class Program
{
static void Main(string[] args)
{
Ren r1 = new Ren();
Ren r2 = new Ren();
Console.Write("请第一个高手出场:");
r1.Name = Console.ReadLine();
Console.Write("请第二个高手出场:");
r2.Name = Console.ReadLine();
//生成血量
Random rand = new Random();
r1.Blood = rand.Next() + ;
r2.Blood = rand.Next() + ;
//攻防
r1.Attack = rand.Next() + ;
r2.Attack = rand.Next() + ;
r1.Defend = rand.Next() + ;
r2.Defend = rand.Next() + ;
Console.WriteLine("大侠" + r1.Name + "\t,生命力" + r1.Blood);
Console.WriteLine("大侠" + r2.Name + "\t,生命力" + r2.Blood);
Console.WriteLine("在一个月黑风高的夜晚狭路相逢!");
while (true)
{
//跳出循环
if (r1.Blood <= && r2.Blood <= )
{
Console.WriteLine(r1.Name + "与" + r2.Name + "皆倾尽全力,共赴黄泉");
break;
}
if (r1.Blood <= )
{
Console.WriteLine(r2.Name + "用了一记猴子捞月,结束了" + r1.Name + "的生命");
break;
}
if (r2.Blood <= )
{
Console.WriteLine(r1.Name + "用了一记黑虎掏心,结束了" + r2.Name + "的生命");
break;
}
//对战
int b1 = rand.Next();//r1掉的血
r1.Blood -= b1;
if (r1.Blood < )
{
r1.Blood = ;
}
System.Threading.Thread.Sleep();
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine(r2.Name + "抡起拳头打了" + r1.Name + b1 + "点血");
Console.ResetColor();
Console.WriteLine();
//稍等一下
System.Threading.Thread.Sleep();
int b2 = rand.Next();//r2掉的血 r2.Blood -= b2;
if (r2.Blood < )
{
r2.Blood = ;
}
Console.ForegroundColor = ConsoleColor.DarkCyan;
Console.WriteLine(r1.Name + "抡起拳头打了" + r2.Name + b2 + "点血");
Console.ResetColor(); Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine("大侠" + r1.Name + "还有" + r1.Blood + "生命力!");
Console.Write("大侠" + r2.Name + "还有" + r2.Blood + "生命力!");
Console.ResetColor();
Console.WriteLine();
Console.WriteLine(); } }
}
}

C#整理8——结构体的更多相关文章

  1. 12、C#基础整理(结构体)

    结构体 1.概念: 结构体是写在main函数外的数据结构,由不同类型的数据组合成一个整体,这些组合在一个整体中的数据是互相联系的 2.声明方式: struct 结构体名 { 成员变量(由类型名+成员名 ...

  2. 【整理】认识MSG结构体

    在Windows程序中,消息是由MSG结构体来表示的.MSG结构体的定义如下(参见MSDN): typedef struct tagMSG { HWND hwnd; UINT message; WPA ...

  3. C语言基础知识点整理(函数/变量/常量/指针/数组/结构体)

    函数 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ...

  4. C#与C++数据类型比较及结构体转换[整理]

    //c++:HANDLE(void   *)                          ----    c#:System.IntPtr//c++:Byte(unsigned   char)  ...

  5. swift学习笔记3——类、结构体、枚举

    之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...

  6. iOS 阶段学习第十天笔记(结构体)

    iOS学习(C语言)知识点整理 一.数据结构 1)概念:数据结构是指计算机程序中所操作的对象——数据以及数据元素之间的相互关系和运算. 2)结构体必须有struct 关键字修饰. 实例代码: stru ...

  7. C 结构体小结

    看了三天结构体,是时候总结一下了. 关于结构体的声明: struct Student { ]; char sex; int age; ]; }; /*然后定义一个Student 类型的 student ...

  8. c语言结构体指针初始化

    今天来讨论一下C中的内存管理. 记得上周在饭桌上和同事讨论C语言的崛起时,讲到了内存管理方面 我说所有指针使用前都必须初始化,结构体中的成员指针也是一样 有人反驳说,不是吧,以前做二叉树算法时,他的左 ...

  9. DEVMODE 结构体

    typedef struct _devicemode { TCHAR dmDeviceName[CCHDEVICENAME]; //打印机(显示设备)名称 WORD dmSpecVersion; WO ...

随机推荐

  1. zabbix server is not running: the information displayed may not be current

    一.1.关闭selinux及防火墙 2.在/etc/hosts文件里加入ip及对应的主机名. 3.修改配置文件:zabbix.conf.php /opt/data/apache2/htdocs/zab ...

  2. 函数内部用setTimeout()调用自身函数相当于setInterval()

    本来setTimeout(function(){},time)只执行了一次function,但是当 function demo() { alert(1); setTimeout('demo()' ,5 ...

  3. bootstrap 常用类名

    一. 常用类1.container居中的内容展示2.row  行内容显示3.col 列内容显示, 列必须在row 中xs 宽度小于768 ,sm宽度小于990 大于768 ,md 宽度大于990,小于 ...

  4. ajax局部刷新分页

    //请求数据加载绑定页面 function DindAjax(pageIndex) {//获取参数 var colors = $("#colorsVal").val(); $.aj ...

  5. 不能修改“System Roots”钥匙串 即下载的.cer 文件添加不到钥匙串

    双击提示  :不能修改“System Roots”钥匙串要更改根证书是否会被信任,请在“钥匙串访问”中打开它,然后修改它的信任设置. 解决办法:添加到   登录或显示LOGIN的 keychain(记 ...

  6. unity 打包 windows 运行 紫色 粉红色

    unity下建立了个小demo,在editer里面运行正常.如下 但是一旦打包发布到android或者windows下就出现了类似这种情况 这种一般是由于材质贴图的缺失,一般来说选定的默认贴图的话会打 ...

  7. Autorelease Pool-自动释放池

    Autorelease Pool是Objective-C中的内存管理方式之一,它与线程和NSAutorelease类有关.每一个线程都拥有自己的Autorelease Pool栈,这个栈底层是由双向链 ...

  8. python-整理--连接MSSQL

    环境 : python3.4 / win10 / vs2013 / sqlexpress2014 需要的工具和包 1.freetds包 下载地址 https://github.com/ramiro/f ...

  9. <正见>摘抄

    1- 没有全能的力量能够扭转死亡之路,因此也就不会困在期待之中.如果没有盲目的期待,就不会有失望,如果能够了解一切都是无常,就不会攀缘执著.如果不攀缘执著,就不会患得患失,也才能真正完完全全地活着. ...

  10. 一级域名301重定向到www二级域名

    301重定向有利于百度的搜索 例如一个域名 www.test.com如果不做设置会产生4个网址, (1)test.com(2)www.test.com(3)test.com/default.html( ...