第一阶段:基础 7.第二季 C#编程中级篇

7.第二季 C#编程中级篇

4:中断模式下如何查看变量的值,如何修改变量的值

5:错误处理(异常处理)

11:匿名类型

12-堆和栈:程序运行时的内存区域

  1. 在数据结构中,栈是一种线性表,而且只可在表的一端进行插入和删除运算的线性表;而堆是一种树形结构,其中树中任一非叶节点的关键字均不大于或不小于其左右子树的结点的关键字。

(值类型在栈中,引用类型在堆中)

13:值类型和引用类型 在内存中的存储

15:面向对象编程-继承

16:虚方法

17:隐藏方法

20:密封类和密封方法

22:关于访问修饰符 protected和static

23:定义和实现接口

不能在接口中定义变量

28:列表List的创建和使用

32:泛型类的定义

33:泛型方法

34:创建我们自己的列表MyList

MyList.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _019_使用泛型和索引器来实现一个我们自己的集合类MyList {
    class MyList<T> where T:IComparable
    {
        private T[] array;
        private int count=0;//表示当前添加的元素的个数

        public MyList(int size)
        {
            if (size >= 0)
            {
                array = new T[size];
            }
        }

        public MyList()
        {
            array = new T[0];
        }

        public int Capacity  获取容量大小
        {
            get { return array.Length; }
        }

        public int Count  //属性访问元素个数
        {
            get { return count; }
        }

        public void Add(T item )  //添加元素
        {
            if (Count == Capacity) //判断元素个数跟列表容量大小是否一样大,如果一样大,说明数组容量不用,需要创建新的数组
            {
                if (Capacity == 0)
                {
                    array = new T[4];//当数组长度为0的时候,创建一个长度为4的数组
                }
                else
                {
                    var newArray = new T[Capacity*2];//当长度不为0的时候,我们创建一个长度为原来2倍的数组
                    Array.Copy(array,newArray,Count);//把旧数组中的元素复制到新的数组中 , 复制前count个  array-->newArray
                    array = newArray;
                }
            }
            array[Count] = item;
            count++;//元素个数自增
        }

        public T GetItem(int index)  
        {
            if (index >= 0 && index <= count - 1)
            {
                return array[index];
            }
            else
            {
                //Console.WriteLine("所以超出了范围");
                throw new Exception("索引超出了范围");
            }
        }

        public T this[int index]  //访问元素
        {
            get//当我们通过索引器取值的时候,会调用get块
            { return GetItem(index); }
            set//当我们通过索引器设置值的时候,会调用set块
            {
                if (index >= 0 && index <= count - 1)
                {
                    array[index] = value;
                } else {
                    //Console.WriteLine("所以超出了范围");
                    throw new Exception("索引超出了范围");
                }
            }
        }

        public void Insert(int index, T item)  //插入元素
        {
            if (index >= 0 && index <= count - 1)
            {
                if (Count == Capacity)//容量不够 进行扩容
                {
                    var newArray = new T[Capacity*2];
                    Array.Copy(array,newArray,count);
                    array = newArray;
                }
                for (int i = count-1; i >=index; i--)
                {
                    array[i + 1] = array[i];//把i位置的值放在后面,就是向后移动一个单位

                }
                array[index] = item;
                count++;
            }
            else
            {
                throw new Exception("所以超出范围");
            }
        }

        public void RemoveAt(int index)  //移除
        {
            if (index >= 0 && index <= count - 1)
            {
                for (int i = index + 1; i < count; i++)
                {
                    array[i - 1] = array[i];
                }
                count--;
            }
            else
            {
                throw new Exception("所以超出范围");
            }
        }

        public int IndexOf(T item)  //从前往后
        {
            for (int i = 0; i < count; i++)
            {
                if (array[i].Equals(item))
                {
                    return i;
                }
            }
            return -1;
        }

        public int LastIndexOf(T item)  //从后往前
        {
            for (int i = Count-1; i >=0; i--) {
                if (array[i].Equals(item)) {
                    return i;
                }
            }
            return -1;
        }

        public void Sort()  //排序
        {
            for (int j = 0; j < Count-1; j++)
            {
                for (int i = 0; i < Count - 1 - j; i++) {
                    if (array[i].CompareTo(array[i + 1]) > 0) {
                        T temp = array[i];
                        array[i] = array[i + 1];
                        array[i + 1] = temp;
                    }
                }
            }

        }
    }
}

 

原文地址:https://www.cnblogs.com/kerven/p/9045818.html

时间: 2024-07-30 23:42:16

第一阶段:基础 7.第二季 C#编程中级篇的相关文章

第一阶段冲刺(第二天)

今天,参照资料案例,利用 Smack 进行手机App 连接openfire服务器,由于下载的jar 包,缺少一些类,连接测试以失败告终 遇到了很多问题:jar包需要从网上进行查找,找到的一直不是很全,导致一些方法不能调用:电脑用的是校园网wifi 环境,同一帐号只能登录一台设备,没法让同一局域网下,最后,又用猎豹wifi 进行了wifi创建. 明天的目标是,修改安卓程序,使其能连接上openfire 服务器.

传智播客C语言视频第二季 第一季基础上增加诸多C语言案例讲解,有效下载期为10 5-10 10关闭

卷 backup 的文件夹 PATH 列表卷序列号为 00000025 D4A8:14B0J:.│  1.txt│  c语言经典案例效果图示.doc│  ├─1传智播客_尹成_C语言从菜鸟到高手_第一章C语言概述A│  ├─文档│  │      第1讲 C语言第一阶段.doc│  │      │  └─视频│          第1讲 C语言第一阶段.mp4│          ├─2传智播客_尹成_C语言从菜鸟到高手_第二章C语言跨平台HelloWorld-A│  ├─2.1 C语言环境简

“金山杯2007逆向分析挑战赛”第一阶段第二题

注:题目来自于以下链接地址: http://www.pediy.com/kssd/ 目录:第13篇 论坛活动 \ 金山杯2007逆向分析挑战赛 \ 第一阶段 \ 第二题 \ 题目 \ [第一阶段 第二题] 题目描述: 己知是一个 PE 格式 EXE 文件,其三个(section)区块的数据文件依次如下:(详见附件)  _text,_rdata,_data 1. 将 _text, _rdata, _data合并成一个 EXE 文件,重建一个 PE 头,一些关键参数,如 EntryPoint,Imp

面向对象编程第一阶段总结

oo到目前为止也算是结束了第一个阶段,作为一个在本学期开学之前一行JAVA代码也没写过的菜鸡,这几周过得真的很艰难...一切都是从零开始摸索,全靠查资料和翻书自学orz 在这次的课程总结中,因为电梯部分的作业更加困难,我出现的问题也较多,所以主要只对第二三次作业进行分析. 第二次作业--傻瓜电梯 一.程序分析 二.个人反思 拿到第二次作业之后,当时整个人是毫无头绪的,本来是想通过画出逻辑关系类图先理清思路,但是冥思苦想了一个下午还是不太能理解课件所给出的的设计建议,于是决定按照自己的想法进行尝试

python基础学习05(核心编程第二版)部分

# -*- coding: utf-8 -*- # ==================== #File: python #Author: python #Date: 2014 #==================== __author__ = 'Administrator' #dict{键:值} #哈希 #注:字典是无顺序的,所以你懂的 #创建与赋值 dict1={} dict2={'name':'apply','avg':24,'sex':'man'} print dict1,dict2

python基础学习07(核心编程第二版)部分

# -*- coding: utf-8 -*- # ==================== #File: python #Author: python #Date: 2014 #==================== __author__ = 'Administrator' #file与input output #文件对象 #简单说来,就是写入和读取的方式 #file(),open()2个操作都是一样的,一般推荐open() #语法 # open(name[, mode[, bufferin

python基础学习12(核心编程第二版)部分

# -*- coding: utf-8 -*- # ==================== #File: python #Author: python #Date: 2014 #==================== __author__ = 'Administrator' #python class #面向对象编程oop思想,3个特性:封装.继承.多态,在其他方面的功能,比如重载,模拟等,也可以自定义自己需要的类 #在python中,面向对象主要2个:类和类实例 #类与实例 #类与实例有关

python基础学习09(核心编程第二版)部分

# -*- coding: utf-8 -*- # ==================== #File: python #Author: python #Date: 2014 #==================== __author__ = 'Administrator' #什么是函数 #就是引用,创建,使用 #例子 def foo(): print '233' foo() #返回与函数类型 def foo1():#是一个过程 print 'hello world!' foo1() foo

python基础学习11(核心编程第二版)部分

# -*- coding: utf-8 -*- # ==================== #File: python #Author: python #Date: 2014 #==================== __author__ = 'Administrator' #执行环境 #可调用对象 """ 许多的python 对象都是我们所说的可调用的,即是任何能通过函数操作符“()”来调用的对象.要调用可调用对象, 函数操作符得紧跟在可调用对象之后.Python 有4