【笔记篇】C#笔记2

返回目录:目录请戳这里~

  1. C#数组
    基本概念不提。。
int[] a;
bool[] b = new bool[10];
float[] c = {0.5, 57.0, 233.3, 12345.67 };
double[] d = new double[/*3*/]{233.33, 1926.0817, 4396.0 };

然后数组和指针有很大的不同。。。
Array类不会用……
有多维数组和交错数组。。。

//多维数组
int[ , ] a = new int [2,3] {
    {0, 1, 2 },
    {3, 4, 5 }
};
int val = a[1,2];
//交错数组
int[][] a = new int[][]{new int[] {3, 4, 5 }, new int[]{ 0, 1, 2 };
int val = a[1][2];

= =
1. C#的字符串有Format(喜大普奔),不过格式化字符串是C#的用着略有不惯= = 然后里面封装了大量的方法= =看不过来,有空会细看的。。

  1. struct(值类型)
    很像C++。。但是。。。

    • 不能定义析构函数和默认的构造函数
    • 不能继承或被继承
    • 成员不能是abstract virtual 或 protected (毕竟不能被继承)
    • 不使用new即可被实例化,此时所有的字段都要被初始化。。
  2. enum(值类型):和C++一样。水过了下一个。

  3. class(引用类型) //下面就很OO了哦

    • 类的默认访问标识符是internal,成员的是private
    • 用法基本和C++没差= =所以就这样咯= =
  4. 继承&&多态
    这个地方挺不好懂的(可能是我太弱了)= =

其实主要原因是因为学C++的时候就不怎么学这些东西(OI根本不考什么OO,你看里面有几个不抖机灵的时候用class的)

不理解的话呢,建议各位打开自己的IDE实战一下,乱改改代码找找差异,这样对每部分代码是干什么的理解会更清楚一些= =
然后再扯一句VS对C#的补全非常的完备(毕竟MS一直推C#嘛),很多时候可以让VS帮你完成很多操作,顺便就可以理解一些语句的作用了~~

看代码比理解概念清晰多了~

继承的形式很简单:

class Parent
{
    ...
}

class Child:Parent
{
    ...
}

基类的初始化

    class Parent
    {
        protected int a, b;
        public Parent(int x,int y)
        {
            a = x;
            b = y;
        }
    }

    class Child : Parent
    {
        public Child(int p, int q) : base(p, q)
        {

        }
    }

C#不支持多重继承~但想实现多重继承的话可以通过接口(interface)(这个还没学,以后再说)

然后就是多态(不是什么多肽更不是什么堕胎= =)
(话说你们输入法打“duotai”会出什么啊?)

继承学C++的时候都用的少,多态什么的就更不懂了QAQ以前写个项目的时候析构函数前面写个virtual但不知道干啥用的啊~好在现在理解了_ (:з」∠) _
所以基本全靠自己体会(我就是自己打了打代码理解的)

C#的多态性分为两种:
- 静态多态性
静态多态性有两种技术来实现:函数重载和运算符重载(这个我会啊2333就不说了)
- 动态多态性
动态多态性啊,开始的时候挺费解的。
分开说,先说abstract
abstract本义是“抽象的”,这样我们用这个关键字就可以创建抽象类,里面包含了抽象方法。。
代码:

abstract class Parent
{
    public abstract void add();//抽象类里定义的抽象方法,无需主体,只需要一个声明,如何实现交给派生类做就好了
}

class Child : Parent
{
    private int a, b;

    public Child()
    {
        a = 1;
        b = 2;
    }

    public override void add()
    {
        Console.WriteLine(a + b);
    } //抽象方法,用override关键字重写 就实现了这个add()方法的功能
}        

然后再说virtual..

//这次是完整的程序了
using System;

namespace HelloWorld
{
    class Parent
    {
        protected int a, b;

        public Parent(int x,int y)
        {
            a = x;
            b = y;
        }
        public virtual void add() //虚方法
        {
            Console.WriteLine("Parent:{0}", a + b);
        }
    }

    class Child : Parent
    {
        public Child(int p,int q) : base(p, q)
        {

        }
        public override void add() //使用override关键字重写了虚方法
        {
            Console.WriteLine("Child:{0}", a + b);
        }
    }

    class Child2 : Parent
    {
        //本类中并没有重写add()方法
        public Child2(int p,int q) : base(p, q)
        {

        }
    }

    class MainProcess
    {
        public static void Main()
        {
            Child ch = new Child(3,4);
            Child2 ch2 = new Child2(5, 6);
            ch.add();
            ch2.add();
        }
    }
}

编译、运行以上程序,可得结果:
Child:7
Parent:11
说明调用标有virtual方法时,先检查有无重写,有则按重写执行,否则继续往上找,直到找不到重写则按virtual进行= =
差不多就是这样。。。

本篇中需要回顾的:
1. Array类
2. C#字符串的方法们
3. 继承和多态还要加强理解= =

还是要继续加油啊~~

原文地址:https://www.cnblogs.com/enzymii/p/8412143.html