List泛型集合之基本使用

来源:互联网 发布:cg软件下载 编辑:程序博客网 时间:2024/06/05 15:50

list< T >基本使用

1.创建泛型集合

  1. 首先引入命名空间:using System.Collections.Generic;
  2. List< 类型 > 集合名 = new List<类型> ();

2.集合数据操作

1.添加数据
集合名.Add(Value)`//往集合中添加数据;
往集合中添加,数据会不断添加到集合中,形成一种类似于排队的效果。

2.查询数据
集合名[索引]取出指定索引位置的数据;
List< T >的索引和数组一样,也是从0开始;
集合的长度可以通过“集合名.Count”这个属性来取得;

3.删除数据
集合名.RemoveAt(索引)删除指定索引位置的数据;

4.修改数据
集合名[索引] = 新值; 给指定索引的数据重新赋值;

List< T >管理对象

对象类定义

定义一个“RPG武器类”,实例化出来的每个对象都代表一把武器。
这个类包含基本字段:

  1. 编号[int]
  2. 名字[String]
  3. 攻击力[int]

并完成相应的属性,构造方法;

List< T >管理对象

  1. 定义一个武器集合;
  2. 实例化单个物品;
  3. 从集合中删除指定的物品;
  4. 修改集合中指定物品的信息;
  5. 查询显示集合手中的数据;

主程序

namespace ConsoleApp1{    class Program    {        static void Main(string[] args)        {//武器集合的定义            List<Weapon> weapons = new List<Weapon>();            //实例化一把武器            Weapon item = new Weapon(1,100, "霸王枪");            weapons.Add(item);            weapons.Add(new Weapon(2,200,"翡翠刀"));            weapons.Add(new Weapon(3, 300, "太极卷轴"));            weapons.Add(new Weapon(4, 400, "绿玉棍"));            //通过名字删除(修改)一个对象.            for (int i = 0; i < weapons.Count; i++)            {                if (weapons[i].Name == "太极卷轴")                {                  weapons.Remove(weapons[i]); }            }            //遍历集合,打印所有内容   打印 类 默认打印ToString内容            for (int i = 0;i<weapons.Count;i++) {                Console.WriteLine(weapons[i]);            }            Console.ReadKey();        }    }}

Weapon类

namespace ConsoleApp1{    class Weapon    {        private int id;        private string name;        private int attack;        public int Id {            get { return id; }            set { id = value; }        }        public string Name        {            get { return name; }            set { name = value; }        }        public int Attack        {            get { return attack; }            set { attack = value; }        }        public Weapon(int id,int attack , string name) {            this.id = id;            this.name = name;            this.attack = attack;        }        public override string ToString()        {            return string.Format($"id:{id}-name:{name}-attack:{attack}");        }    }}

关于c#代码基础中一些内容

c#中的get和set的用法
面向对象编程的一个规则是:使用户只需要指定对象能做什么,而不需要去指定或者了解对象是如何完成该的。

属性是对象内部的数据,用户如果能够直接访问对象内部数据,显然就违反了上述规则。(这也有点类似Windows系统对内存的保护,可以通过API来操作,但不推荐直接访问内存,那样就可能把内存搞乱了。)

通过get和set访问器来访问,就保持了这种规则,而且还提供了额外的功能,如对值进行检查,实现只读或只写属性等。

总的来说就是可以通过set get 来对类的属性进行封装,面向对象的程序是不可以直接用类自己定义的属性的

刚刚学C#的时候,很多人都不明白属性的访问器有什么用呢,我上网见了不少的评论,拉下来给大家看看
一般面向对象编程语言都要求成员变量不能直接暴露给外部访问,如下:
public class A
{
public int Age; //这是不好的,待会有程序员可能把-1赋给Age
}
为了防止乱赋值,C#设计了一个属性机制,要求把成员变量设为私有,在通过属性来控制成员变量的读写,如下:

public class B{    private int age;  //私有成员变量    public int Age    //age的属性    {        get{ return age; }  //读取器        set{                //写入器            if(value>0)              age = value;   //value是准备写入的值        }    }}

这样Age就像保安一样,挡在age的前面。访问age的时候需要通过Age许可,

B b = new B();b.Age = -1;  //这是不行的,-1被带入value,value<0,判断不成立b.Age = 10;  //这是可行的 

C#中override和overload的区别
重载应该叫overload,重写叫override;重载某个方法是在同一个类中发生的!重写是在子类中重写父类中的方法。

1.override: 父类:public virtual string ToString(){return “a”;}
子类:public override string ToString(){return “b”;}
2.overload: 同一类中或父子关系类中皆可.
public string ToString(){return “a”;}
public string ToString(int id){return id.ToString();}
重写(override)是用于重写基类的虚方法,这样在派生类中提供一个新的方法;

重载(overload)是提供了一种机制, 相同函数名通过不同的返回值类型以及参数来表来区分的机制

很本质的区别就是看函数特征:覆写(Override)的两个函数的函数特征相同,重载(Overload)的两个函数的函数名虽然相同,但函数特征不同。
函数特征包括函数名、参数的类型和个数。
Override 是在继承的时候,如果你写的函数与要继承的函数函数特征相同,那么,加上这个关键字,在使用这个子类的这个函数的时候就看不见父类(或超类)的函数了,它被覆盖掉了。
比如:Derived继承了Base,Base里面有void A(int a) ,那么如果你Derived里面觉得A写得不好或不适合这个类,你想重新再写一遍A里的代码,那么就写override void A(int a)这样,原来的那个函数就被你新写的这个覆盖掉了。
overload 是重载,就是说函数名相同,函数特征不同,系统会根据你提供的参数来调相应的函数。
比如:void A(int a)和void A(int a,int b)
如果你用的是A(1)那么调的是第一个,如果是A(1,1)那么调的是第二个。

1. 重写(override)

使用 override 修饰符来修改方法、属性、索引器或事件。重写方法提供从基类继承的成员的新实现。由重写声明重写的方法称为重写基方法。重写基方法必须与重写方法具有相同的签名。
不能重写非虚方法或静态方法。重写基方法必须是虚拟的、抽象的或重写的。也就是说,用 override 修饰符重写的基类中的方法必须是 virtual, abstract 或 override 方法。

2. 重载(overload)

当类包含两个名称相同但签名不同的方法时发生方法重载。

使用重载方法的指南:
a. 用方法重载来提供在语义上完成相同功能的不同方法。
b. 使用方法重载而不是允许默认参数。默认参数的版本控制性能不好,因此公共语言规范(CLS)中不允许使用默认参数。
c. 正确使用默认值。在一个重载方法系列中,复杂方法应当使用参数名来指示从简单方法中假定的默认状态发生的更改。
d. 对方法参数使用一致的排序和命名模式。提供一组重载方法,这组重载方法带有递增数目的参数,以使开发人员可以指定想要的级别的信息,这种情况很常见。您指定的参数越多,开发人员就可指定得越详细。
e. 如果必须提供重写方法的能力,请仅使最完整的重载是虚拟的并根据它来定义其他操作。

原创粉丝点击