zoukankan      html  css  js  c++  java
  • 《C#编程》课件

    声明多维数组
    • 创建一个多维数组
    int[,] intMatrix;
    float[,] floatMatrix;
    string[,,] strCube;

    使用new关键字
    • 必须指定每个维度的大小
    int[,] intMatrix = new int[3, 4];
    float[,] floatMatrix = new float[8, 2];
    string[,,] stringCube = new string[5, 5, 5];

    Jagged Array交错数组
    • 交错数组有点像多维数组
    • 但是每个维度有不同的大小
    • 交错数组是数组的数组
    • 每个数组有不同长度

    如何创建交错数组
    int[][] jagged = new int[3][];
    jagged[0] = new int[3];
    jagged[1] = new int[2];
    jagged[2] = new int[5];

    生成01的函数Gen01,通过该函数体会递归:

    static void Gen01(int index, int[] vector)
    {
        if (index == -1)
            Print(vector);
        else
        for (int i=0; i<=1; i++)
        {
        vector[index] = i;
        Gen01(index-1, vector);
        }    
    }
    Gen01

    扩展方法(具体见MSDNhttps://msdn.microsoft.com/zh-cn/library/bb383977.aspx

    最常见的扩展方法是 LINQ 标准查询运算符。

    在代码中,可以使用实例方法语法调用该扩展方法。 但是,编译器生成的中间语言 (IL) 会将代码转换为对静态方法的调用。 因此,并未真正违反封装原则。 实际上,扩展方法无法访问它们所扩展的类型中的私有变量。

    anonymous type匿名类型

    // 使用匿名类型表达一辆车

    var myCar = new { Color = "银色", Brand = "大众", Speed = 180 }; //使用var声明一个匿名类型

    Console.WriteLine("我的车是{0}-{1}。 ",
    myCar.Color, myCar. Brand);

    匿名类型是引用类型,直接派生自 System.Object
    已经重写了Equals(), GetHashCode()和
    ToString()的版本
    • 不要有==和!=运算符重载 (直接使用上面说的Equals())

    可访问级别
    • C#中的访问修饰符
    • public-访问不受限制
    • private-访问仅限于包含类型
    • protected-访问仅限于包含类型或从包含类型派 
    生的类型
    • internal-访问仅限于当前程序集
    • protected internal-访问限制到当前程序集或
    从包含派生的类型的类别

    继承:重要方面

    结构体不能被继承
    • C#中没有多继承
    • 只有多接口可以被实现
    • 实例和静态构造函数不能被继承
    • 继承是传递关系
    • 如果C从B派生,而B从A派生,那么C同样从A派生
    • 一个派生类扩展它的基类
    • 能够添加新成员,但不能删除派生成员
    • 以相同内容或签名声明的新成员隐藏了所继承成员
    • 一个类能够声明virtual虚拟方法和属性
    • 派生类能够override重写这些方法的实现
    • 如: Object.Equals()是虚方法


    虚方法
    • virtual method虚方法是用于基类实例和派生类有
    相同方式,但其实现不同的方法
    • 当声明为virtual时,方法称为虚方法
    public virtual void CalculateSurface() 
    • 基类中声明为虚的方法,能够在派生类中使用
    override关键字重写

    防御式编程原则
    防御式编程意味着:防御式编程意味着:对任何公开方法,检查它的输入数据,前置条件和后置条件
    期望不正确的输入,将其正确处理
    • 不仅仅思考正常的执行流,也考虑不寻常的情况
    确保不正确的输入结果出现异常,而不是不正确输出

    一次性资源
    • 小心处理一次性资源
    • 所有实现了IDisposable的类应当遵守tryfinally / using模式:

    StreamReader reader =new StreamReader("file.txt");
    try
    {
        String line =reader.ReadLine();
    }
    finally
    {
        reader.Close();
    }
    
    StreamReader reader =new StreamReader("file.txt");
    using (reader)
    {
        String line =reader.ReadLine();
    }

    自文档代码
    最好的文档是代码自己;
    制作自我解释和自文档代码,易于阅读和理解;
    不要对坏代码写文档,重写它!
    好代码不需要读注释,它是自我解释的

    自动洗牌程序

    class Card
    {
        public string Face { get; set; }
        public Suit Suit { get; set; }
        public override string ToString()
        {
            string card ="(" + this.Face + " " + this.Suit +")";
            return card;
        }
    }
    
    enum Suit{Club, Diamond, Heart, Spade};
    
    static void Main()
    {
        Card card = new Card() { Face="A", Suit=Suit.Club };
        Console.WriteLine(card);
    }   

    从上面的代码体会ToString函数的重写,以及它是怎样被隐式调用的。

    string output = point.Name + ":" + point; 
    object都会实现ToString方法
    当他和string 执行 + 号操作时 ,编辑器自动执行将obj转换成string类型
    如string output = point;出错,string output = point + "";//正确,会自动转为string

    上面这段也可以体会ToString的隐式调用。

  • 相关阅读:
    小型的Unix系统字符SHELL
    小型的Unix系统字符SHELL
    string 大小写转换
    string 大小写转换
    string 大小写转换
    ACM 的中取模
    ACM 的中取模
    使用adb命令停止APP后台进程的方法
    how to use adb and gdbserver with VirtualBox
    CentOS的KVM实践(虚拟机创建、网桥配置、Spice)
  • 原文地址:https://www.cnblogs.com/ph829/p/6009504.html
Copyright © 2011-2022 走看看