C#基础知识

来源:互联网 发布:影视制作软件哪个好 编辑:程序博客网 时间:2024/06/05 09:10

Main():程序的入口点。
Console.WriteLine(): 调用System.Console类的WriteLine()方法。WriteLine()是静态方法。在调用之前不需要实例化Console对象。
变量:
—变量的初始化:
1. 变量是类或结构的字段,如果没有显示初始化,创建这些变量时,其默认值就是0;
2.方法的局部变量必须在代码中显示初始化,之后才能在语句中使用他们的值。
**在C#中实例化一个引用对象需要使用new关键字。创建一个引用,使用new关键字把该引用指向存储在堆上的一个对象。

Dog dog //创建一个dog对象dog=new Dog()//创建一个引用,指向dog对象。

隐式类型化局部变量
使用关键字var来声明局部变量,不再需要指明变量的确切类型,可通过声明变量时的初始值来判断。

int someOne=0;就变成:var someOne=0;

原则:变量必须初始化;初始化器不能为空;初始化器必须放在表达式中;不能把初始化器设置为一个变量,除非在初始化器中创建了一个新对象。

常量
常量:是其值在使用过程中不会发生变化的变量。关键字:const

const int=3;

—-特点:

  1. 常量必须在声明时初始化,指定了其值后,就不能再改写。
  2. 常量的值必须能在编译时用于计算=>不能从一个变量中提取的值来初始化常量(使用只读字段。)const a=b+1;//error
  3. 常量总是静态的,不允许在常量声明中包含修饰符static。

预定义数据类型:
—-值类型:整型,浮点,布尔,字段,枚举,结构
—-引用类型:类,委托,数组,接口….
——-区别:值类型直接在堆栈中存储其值;引用类型在托管堆上存储对值的引用。
预定义的值类型:
整型:sbyte/byte,short/ushort,int/uint,long/ulong
浮点:float,double
decimal类型:128位高精度十进制数表示法。
bool: false,true
char:用单引号括起来。char A='a';

预定义的引用类型:object和string。

名称空间:是.NET中提供应用程序代码容器的方法。关键字namespace。以“层”形式存在,如有多层,则以“.”分开。
using语句:
1.简写类的全名:要在文件的顶部列出类的名称空间,前面加using关键字,在文件的其他地方就可以使用其类型名称来引用名称空间中的类型了。
2.给类和名称空间指定别名:如:using c=Console.WriteLine;别名的修饰符是“::”

控制台:
Console.ReadLine():读取用户的输入。
Console.Write():
Console.WriteLine():
Console.ReadKey():等待用于输入。


对象和类型
类:
定义:class 类名
类的成员:
数据成员:字段、常量、事件
函数成员:包括方法、属性、构造函数、终结器、运算符、索引器。
方法
声明:包括任意方法修饰符(如方法的可访问性)、返回值类型、方法名、输入参数的列表(用圆括号括起来)和 方法体(用花括号括起来:—如果方法有返回值,return语句就必须与返回值一起使用,以指定出口点。)。
—- 调用:
创建对象:声明和实例化对象(new)。
调用:对象名 . 方法名
ref参数:迫使值参数通过引用传递给方法,使该方法对变量所做的任何改变都会影响原始数据。
out参数: 编辑器使用out关键字来初始化。输出参数。
方法的重载:同一类中,方法名相同,但参数的个数和/或类型不同(签名不同)。为了重载方法,只需要声明同名但参数个数或类型不同的方法即可。
———静态方法和实例方法:
静态方法:有static关键字
实例方法:没有static关键字
—区别:静态方法不对特定实例进行操作,静态方法只能访问静态成员,而不能访问实例成员。访问静态方法只能使用类名(如:class1.Add();),而不需要创建对象,也不能使用对象名来引用。
实例方法可以可以访问静态和实例成员(因为实例成员变量是属于某个对象的,而静态方法在执行时,并不一定存在对象。)调用实例方法时,必须使用类的实例或对象来引用。(如:p.Add();),实例方法对类的某个给定的实例进行操作,在实例方法类中可以使用this来访问该实例,调用实例方法时必须先创建一个对象。

属性:
在客户端代码看来,它们是一个字段。
封装:隐藏对象的信息,留出访问的接口。作用:封装是为了防止对实现细节的访问。避免外界直接可以修改类的内部信息。通常使用属性对字段进行封装。
—-所谓封装,只是为使用者提供类对象访问的部分(包含类的成员变量和方法),把类中其他成员变量和方法隐藏起来,不能访问。
—-封装的快捷键:Ctrl+R+E

private int age;//隐藏字段public int Age//公开属性{  get//读访问器    {     return age;    }  set//写访问器    {     age=value;    }}

只读属性:在属性定义中省略set访问器,就可以创建只读属性 。
自动实现的属性:属性的set和get访问器中没有任何逻辑。访问器的访问级别可以不同 。 public int Age { get; private set; }

构造函数:
声明基本构造函数的语法:就是声明一个与包含的类同名的方法,但该方法没有返回类型。
构造函数的作用:为属性赋值。
如果没有显示的定义构造函数,则会有一个默认的无参数的构造方法。
只能用new 方法名() 的形式调用构造方法。
构造方法通常声明为public。

class Program    {   //成员字段        private int age;        public int Age        {            get            {                return age;            }            set            {                age = value;            }        }        //方法        public void MyAge()        {            Console.WriteLine("我的年龄是:{0}", age);        }        //代参的构造函数        public Program( int age)        {            this.age = age;        }        static void Main(string[] args)        {  //调用构造函数            Program m = new Program(7);            m.MyAge();//结果:我的年龄是:7        }    }

静态构造函数:没有访问修饰符;不能带任何参数;一个类只能有一个静态构造函数;只能访问静态成员。

只读字段:关键字readonly,允许把一个字段设置为常量,但还需要执行一些计算,以确定它的初始值。其规则是可以在构造函数中给只读字段负值,但不能在其他地方赋值。如果要把只读字段设置为静态,就必显式声明它。

匿名类型:
var关键字用于表示隐式类型化的变量。与new关键字一起使用时,可以创建匿名类型。匿名类型是一个继承Object类且没有名字的类,提供一种方便的方法用来将只读属性封装到单个对象中。
Tip: 匿名类型是由一个或多个公共只读属性组成的类类型。不允许包含其他种类的类成员(方法、事件…)

var person=new{FirstName:"jack",LastName:"tonny"};

结构:
关键字struct,定义一个结构与定义一个类相似。
tip: 较小的数据类型使用结构可提高性能。
结构与类的区别:
相同:都是创建对象的模板,每个对象都包含数据,并提供了处理和访问数据的方法。
不同:
这里写图片描述

部分类
关键字partial,允许把类、结构、方法或接口放在多个文件中。
用法:partial关键字放在class、struct或interface关键字的签名。

文件1partial class A{  public void TextMethod1()   {    //do something   }}文件2partial class A{  public void TextMethod2()   {    //do something   }}等价于:class A{   public void TextMethod1()    {     //do something    }   public void TextMethod2()    {     //do something    }}

Object类:
所有的.net类都派生自System.Object。

System.Object()方法:

  1. ToString() :获取对象的字符串表示的一种便捷方式。

  2. Equals()和RefernceEquals() : 比较对象的相等性。

  3. Finalize() : 在引用对象作为垃圾被回收以清理资源时调用它。

  4. GetType() :
    返回从System.Type派生的类的一个实例。这个对象可以提供对象成员所属类的更多信息,包括基本类型、方法、属性等。

  5. GetHashCode() :在映射(散列表或字典)的数据结构中使用。

  6. MemberwiseClone() : 复制对象。

    扩展方法:
    允许开发人员向一个现有公共语言运行库类型的公开契约中添加新方法,不用生成子类或者重新编译原来的类型。是一种特殊的静态方法,

 声明方式: public static 返回类型 扩展方法名(this 要扩展的类型 名,参数列表)

继承:

语法://派生自pet类和IInterface1接口class Dog:petIInterface1{//dosomething}

实现继承:表示一个类型派生于一个基类型,它拥有该基类型的所有成员字段和函数。适用于:在需要给现有的类型添加功能,或许多相关的类型共享一组重要的公共功能时。
虚方法:把一个基类函数声明为virtual,就可以在任何派生类中重写该函数。
虚方法的实现可以由派生来取代,取代所继承的虚方法的实现过程称为重写(override)该方法。在虚方法调用中,该调用所设计的那个实例的运行时类型确定了要被调用的究竟是该方法的哪一种实现。

     例:      class Program    {        //虚方法        public virtual void VirtualMethod()        {            Console.WriteLine("这是基类的虚方法!");        }        //派生类        class class1 : Program        {   //重写            public override void VirtualMethod()            {                Console.WriteLine("这是重写的方法");            }        }        static void Main(string[] args)        {            Program a1 = new Program();            a1.VirtualMethod();//这是基类的虚方法            class1 b1 = new class1();            b1.VirtualMethod();//这是重写的方法        }    } 

隐藏方法:
如果签名相同的方法在基类和派生类中都进行了声明,但该方法没有声明virtual和override,派生类方法就会隐藏基类方法。
要隐藏一个方法应使用new关键字声明。

class Program    {        public  void OneMethod()        {            Console.WriteLine("这是基类的方法!");        }        //派生类        class class1 : Program        {              public new void OneMethod()            {                Console.WriteLine("这是派生类的方法");            }        }        static void Main(string[] args)        {            Program a1 = new Program();            a1.OneMethod();//这是基类的方法            class1 b1 = new class1();            b1.OneMethod();//这是派生类的方法        }    }

抽象类和抽象函数:
关键字:abstract
抽象类不能实例化;抽象函数不能直接实现,必须在非抽象的派生类中重写。

密封类和密封方法:

接口继承:表示一个类型只继承了函数的签名,没有继承任何实现代码。适用于:在需要指定该类型具有某些可用的特性时。
**多重继承:**C#不支持多重实现继承,而支持多重接口继承。


重载:
方法的重载:只方法名相同,但参数的个数或类型不同。
Tip:方法名相同,参数参数,但返回值不同–>不为重载!
—- 注意:

  • 两个方法不能仅在返回类型上有区别。(系统不知道该调用哪个方法,会编译错误)

  • 两个方法不能仅根据参数是声明为ref还是out来区分。

0 0