zoukankan      html  css  js  c++  java
  • C#基础笔记(第二十天)

    1、复习
    属性:保护字段的
    构造函数:初始化对象
    初始化对象:给对象的每个属性去赋值
    什么时候会调用构造函数:当我们new的时候
    面向对象中需要注意的两个关键字
    this 1.代表当前类的对象 2.调用自己的构造函数
    new 1.创建对象 2.隐藏从父类哪里继承过来的成员
    base 调用父类的构造函数,在子类中调用父类的重名方法

    什么是类?
    类是模子,确定对象将会拥有的特征(属性)和行为(方法)
    什么是对象?
    对象是一个你能够看得到,摸得着的具体实体-万物皆对象(具体存在的东西)
    类是模具,创建对象的模具,抽象的。
    类是一种数据类型,用户自定义的数据类型
    类组成:字段,属性,方法,构造函数等
    对象是具体的,是类的具体实例,对象具有属性(特征)和方法(行为)
    类中包含了数据(用字段表示)与行为(用方法(函数、功能)表示,方法为一块具有名称的代码)

    2、访问修饰符
    public 公开的,公共的
    private 私有的,只能在当前类的内部访问,类中成员们,如果不加访问修饰符,默认就是private
    procteced 受保护的,可以在当前类的内部访问,也可以再该类的子类中访问。
    internal 在当前项目中都可以访问。
    procteced internal 在当前项目和改类的子类中都可以访问
    能够修饰类的访问修饰符只有两个,Internal和public

    3、常用的关键字
    this
    1.代表当前类的对象
    2.调用自己的构造函数
    base
    调用父类的成员
    new
    1.创建对象
    2.隐藏父类的成员
    virtual
    标记一个方法是虚方法
    abstract
    抽象的
    override
    重写
    interface
    接口
    partial
    部分类
    sealed
    密封类:不允许被继承,但可以继承别人
    return
    1.在方法中返回要返回的值
    2.立即结束本次方法
    break
    跳出当前循环
    continue
    结束本次循环,回到循环条件进行判断
    static
    静态的
    struct
    结构
    enum
    枚举
    const
    常量

    4、虚方法,抽象方法
    关于虚方法需要注意的几点:
    1.父类中如果有方法需要让子类重写,则可以将该方法标记为virtual
    2.虚方法在父类中必须有实现,哪怕是空实现。
    3.虚方法子类可以重写(override),也可以不重写
    关于冲向方法注意的几点:
    1.需要用abstracy关键字标记。
    2.抽象方法不能有任何方法实现。
    3.抽象成员必须包含在抽象类中。
    4.由于抽象成员没有任何实现,所以子类必须将抽象成员重写。
    5.抽象类不能实例化,
    抽象类的作用:抽象类的作用就是为了让子类继承。
    6.抽象类中可以包括抽象成员,可以包括有具体代码的成员。
    7.还有抽象方法不能用static修饰

    5、接口
    1.接口中只能包含方法(属性、时间、索引器也都是方法)
    2.接口中的成员都不能有任何实现。光说不做
    3.接口不能被实例化
    4.接口中的成员不能有任何访问修饰符。(默认为public)
    5.实现接口的子类必须将接口中的所有成员全都实现。
    6.子类实现接口的方法时,不需要任何关键字,直接实现即可。
    7.接口存在的意义就是为了多态。

    接口是什么?什么时候使用接口?使用接口的目的是什么?多态
    鸟会飞 飞机也会飞
    不能把飞提取出来作为父类,只能把飞写成一个接口
    public interface IFlyable
    {
    void fly();
    }

    public class Bird
    {

    }
    public class QQ : Bird
    {

    }
    public class Maque : Bird, IFlyable
    {
    public void fly()
    {
    Console.WriteLine("鸟会飞");
    }
    }

    public class Plane:IFlyable
    {
    public void fly()
    {
    Console.WriteLine("飞机会飞");
    }
    }


    IFlyable fly = new Maque();
    fly.fly();
    Console.ReadKey();

    继承,先写父类,再写接口

    属性
    构造函数
    重载,多态

    6、字符串
    1.字符串的不可变性
    2.字符串可以看做是char类型的只读数组

    7.高效的StringBuilder
    不需要开辟新的string空间,可以添加,拼接,插入,替换字符串,最后再toString转为string类型
    StringBuilder sb = new StringBuilder();
    sb.Append("张三");
    sb.Append("李四");
    sb.Append("王五");
    sb.Append("赵六");
    sb.Insert(1, 123);
    sb.Replace("李四", "颜色");
    sb.ToString();
    Console.WriteLine(sb);
    Console.ReadKey();
    Console.ReadKey();

    表格
    StringBuilder sb = new StringBuilder();
    sb.Append("<html>");
    sb.Append("<head>");
    sb.Append("</head>");
    sb.Append("<body>");
    sb.Append("<table border='1px' cellpadding='0px' cellspacing='0px'>");
    sb.Append("<tr>");
    sb.Append("<td>星期一</td>");
    sb.Append("<td>星期一</td>");
    sb.Append("<td>星期一</td>");
    sb.Append("<td>星期一</td>");
    sb.Append("</tr>");
    sb.Append("<tr>");
    sb.Append("<td>星期一</td>");
    sb.Append("<td>星期一</td>");
    sb.Append("<td>星期一</td>");
    sb.Append("<td>星期一</td>");
    sb.Append("</tr>");
    sb.Append("<tr>");
    sb.Append("<td>星期一</td>");
    sb.Append("<td>星期一</td>");
    sb.Append("<td>星期一</td>");
    sb.Append("<td>星期一</td>");
    sb.Append("</tr>");
    sb.Append("<tr>");
    sb.Append("<td>星期一</td>");
    sb.Append("<td>星期一</td>");
    sb.Append("<td>星期一</td>");
    sb.Append("<td>星期一</td>");
    sb.Append("</tr>");
    sb.Append("</table>");
    sb.Append("</body>");
    sb.Append("</html>");
    webBrowser1.DocumentText = sb.ToString();

    7、集合
    ArraryList
    Hashtable
    List<T>
    Dictionary<TKey,Tvalue>

    //ArrayList list = new ArrayList();
    //list.Add();
    //list.AddRange();
    //键值对集合
    //Hashtable ht = new Hashtable();
    //ht.Add()
    //List<int> list = new List<int>();
    //list.Add(); 添加单个元素
    //list.AddRange();添加集合
    //list.Insert();插入
    //list.InsertRange();插入集合
    //list.Remove();移除
    //list.RemoveAt();根据下标移除
    //list.RemoveRange();移除一定范围的元素
    //list.Contains();判断是否包含

    //list.RemoveAll();

    List<T>类似于ArrayList,ArrayList的升级版。
    各种方法:Sort(),Max(),Min(),Sum()...
    DIctionary<K,V>类似于Hashtable,Hashtable的升级版。
    推荐使用泛型集合。
    T,K,V就像一把锁,锁住集合值能存在某种特定的类型,这里的T,K,V也可以是其它字母
    泛型集合可以进行foreach遍历,是因为实现了IEnumerable<T>具有了GetEnumerator()方法

    //Dictionary<int, string> dic = new Dictionary<int, string>();
    //dic.Add(1, "张三");
    //dic.Add(2, "李四");
    //dic.Add(3,"王五");
    //dic.Add(4, "赵六");
    ////用add直接覆盖添加会报错
    //dic[4] = "还是赵六";
    //foreach (KeyValuePair<int,string> kv in dic)
    //{
    // Console.WriteLine("{0}-----{1}",kv.Key,kv.Value);
    //}
    //Console.ReadKey();
    8、装箱或者拆箱
    装箱:就是将值类型转换为引用类型
    拆箱:就是将引用类型转换为值类型
    值类型:bool int double char struct enum decimal 栈
    引用类型:string 数组 集合 interface object 自定义类 堆
    拆箱或者装箱的两种类型必须具有集成

    集合转为数组
    int[]Ji= list.ToArray();

    集合初始化器
    List<int> list = new List<int>() { 1, 2, 3, 5, 64, 589, 642, 0, 36, 1000 };

    9、结构和类的区别
    类型
    结构:值类型 栈
    类:引用类型 堆

    声明的语言:class struct

    在类中,构造函数里,既可以给字段赋值,也可以给属性赋值。构造函数是可以重载的。
    但是,在结构的构造函数当中,必须只能给字段赋值
    在结构的构造函数当中,我们需要给全部的字段赋值,而不能去选择的给字段赋值

    调用:

    结构是否可以New?
    在栈开辟空间 结构new 调用结构的构造函数

    结构和类的构造函数:
    相同点:不管是结构还是类,本身都会有一个默认的无参数的构造函数
    不同点:当你在类中写了一个新的构造函数之后,那个默认的无参数的构造函数都被干掉了。
    但是,在结构当中,如果你写了一个新的构造函数,那个默认的无参数的构造函数依然在。

    如果我们只是单纯的存储数据的话,我们推荐使用结构。
    因为结构的值是分配在栈上的,比较节省空间。单纯的存储数据,不涉及面向对象。

    如果我们想要使用面向对象的思想来开发程序,我们推荐使用我们的Class,因为结构不具备面向对象的特征

  • 相关阅读:
    7503E-M-irf2配置以及bfd配置
    nltk_29_pickle保存和导入分类器
    nltk_28Twitter情感分析模型
    美国在研新药_读取单个PDF
    Python:eval的妙用和滥用
    opencv_判断两张图片是否相同
    Make 命令教程
    pdf在线处理网站
    K-Means clusternig example with Python and Scikit-learn(推荐)
    自然语言27_Converting words to Features with NLTK
  • 原文地址:https://www.cnblogs.com/VSMinos/p/7873487.html
Copyright © 2011-2022 走看看