zoukankan      html  css  js  c++  java
  • C#整理8——结构体

    结构体:相当于是我们自己定义的一种复杂的类型。
    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+" "+zhangsan.Name+" "+zhangsan.Age);
    Console.WriteLine(zhangsan.Nation+" "+(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> 结构体是一个值类型. 在创建结构体对象的时候,结构体对象直接存储在变量中. 结构体变量之间相互赋值的时候,是逐个拷贝字段的值.

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

    对战游戏

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 
     6 namespace ConsoleApplication1
     7 {
     8     struct Ren
     9     {
    10         public string Name;
    11         public int Blood;
    12         public int Attack;
    13         public int Defend;
    14 
    15 
    16     }
    17     class Program
    18     {
    19         static void Main(string[] args)
    20         {
    21             Ren r1 = new Ren();
    22             Ren r2 = new Ren();
    23             Console.Write("请第一个高手出场:");
    24             r1.Name = Console.ReadLine();
    25             Console.Write("请第二个高手出场:");
    26             r2.Name = Console.ReadLine();
    27             //生成血量
    28             Random rand = new Random();
    29             r1.Blood = rand.Next(1000) + 1000;
    30             r2.Blood = rand.Next(1000) + 1000;
    31             //攻防
    32             r1.Attack = rand.Next(50) + 50;
    33             r2.Attack = rand.Next(50) + 50;
    34             r1.Defend = rand.Next(50) + 50;
    35             r2.Defend = rand.Next(50) + 50;
    36             Console.WriteLine("大侠" + r1.Name + "	,生命力" + r1.Blood);
    37             Console.WriteLine("大侠" + r2.Name + "	,生命力" + r2.Blood);
    38             Console.WriteLine("在一个月黑风高的夜晚狭路相逢!");
    39             while (true)
    40             {
    41                 //跳出循环
    42                 if (r1.Blood <= 0 && r2.Blood <= 0)
    43                 {
    44                     Console.WriteLine(r1.Name + "" + r2.Name + "皆倾尽全力,共赴黄泉");
    45                     break;
    46                 }
    47                 if (r1.Blood <= 0)
    48                 {
    49                     Console.WriteLine(r2.Name + "用了一记猴子捞月,结束了" + r1.Name + "的生命");
    50                     break;
    51                 }
    52                 if (r2.Blood <= 0)
    53                 {
    54                     Console.WriteLine(r1.Name + "用了一记黑虎掏心,结束了" + r2.Name + "的生命");
    55                     break;
    56                 }
    57                 //对战
    58                 int b1 = rand.Next(200);//r1掉的血
    59                 r1.Blood -= b1;
    60                 if (r1.Blood < 0)
    61                 {
    62                     r1.Blood = 0;
    63                 }
    64                 System.Threading.Thread.Sleep(1000);
    65                 Console.ForegroundColor = ConsoleColor.Red;
    66                 Console.WriteLine(r2.Name + "抡起拳头打了" + r1.Name + b1 + "点血");
    67                 Console.ResetColor();
    68                 Console.WriteLine();
    69                 //稍等一下
    70                 System.Threading.Thread.Sleep(1500);
    71                 int b2 = rand.Next(200);//r2掉的血
    72 
    73 
    74                 r2.Blood -= b2;
    75                 if (r2.Blood < 0)
    76                 {
    77                     r2.Blood = 0;
    78                 }
    79                 Console.ForegroundColor = ConsoleColor.DarkCyan;
    80                 Console.WriteLine(r1.Name + "抡起拳头打了" + r2.Name + b2 + "点血");
    81                 Console.ResetColor();
    82 
    83 
    84                 Console.ForegroundColor = ConsoleColor.Yellow;
    85                 Console.WriteLine("大侠" + r1.Name + "还有" + r1.Blood + "生命力!");
    86                 Console.Write("大侠" + r2.Name + "还有" + r2.Blood + "生命力!");
    87                 Console.ResetColor();
    88                 Console.WriteLine();
    89                 Console.WriteLine();
    90 
    91             }
    92 
    93         }
    94     }
    95 }
    View Code
  • 相关阅读:
    php安装yaf,memcache,memcached模块
    django的ORM操作
    Composer简介
    MySQL中exists和in的区别及使用场景
    MySQL事务原理浅析
    MySQL JOIN原理
    mysql 子句、子查询、连接查询
    多表连接的三种方式详解 HASH JOIN MERGE JOIN NESTED LOOP
    数据库多表连接方式介绍-HASH-JOIN
    MySQL中的case when 中对于NULL值判断的坑
  • 原文地址:https://www.cnblogs.com/viven/p/4323499.html
Copyright © 2011-2022 走看看