c#学习笔记

c#初学写点儿备忘录

console.write();方法不自动添加换行符;

console.Writeline();方法自动添加换行符

c#中可以使用任意数量的替代标记和任意数量的值

1.值可以以任何顺序使用

2.值可以在格式字符串中替换任意次

Console.writeline(“three integersare{1},{0} and {1}.”,3,6)

输出 three integers are63and6

命名空间 类 方法

decimal 准确的表示分数,用于货币的计算 有效数字精度未28

 

预定义类型:

用户定义类型 class struct array enum delegate(委托类型) interface(接口类型)

 

值类型和引用类型:

值类型只需要一段单独的内存,用于存储实际的数据

引用类型需要两段内存 第一段存储实际的数据,总是位于堆当中,第二段是一个引用,指向数据在堆中存放的位置。

dynamic 关键字动态化的静态类型

可空类型 :

形式:例:int myNint=28;

注意点:

1.可空类型总是基于另外一个已声明类型,此类型名为底层类型

2.可以从任何值类型创建可空类型,包括预定义的简单类型

3.不可以从引用类型或其他可空类型创建可空类型

4.不需要在代码中显式声明可空类型。

5.在非可空类型和可空类型之间存在隐式转化,(不需要强制转换)

6.在可空类型和非可空类型中存在显示转化

7.可空类型的变量值不是NULL

例:intmyint=1

int regent=(int) myint1;

 

类:逻辑上相关的数据项和函数的封装集合。

类的声明:

      类的名称

类的成员

类的特征

Class firdrt 关键字 类名

{

   成员声明

}

类中成员的声明可以引用另一个在后面的类声明中才定义的成员

 

类中的变量:字段(cc++不同,c#在类型的外部不能够声明全局变量。所有的字段都属于类型,而且必需在类型声明内部声明


类中定义 方法

 

声明类类型的变量所分配的内存是用来保存引用的(),要为实际数据分配内存需要使用new运算符

例:

Class Smart{………}

Smart www=new www();//申请堆变量

www变量名存储在栈中

 

访问修饰符 public private protected internal(内部的)protected internal(受保护内部的)

默认访问级别私有访问

类的内部成员可以自由的互相访问

 

var 关键字只能用于本地变量,不能用于字段;

只能在变量声明中包含初始化时使用

仅为速记

 

 

方法中的引用参数:

1.    使用引用参数时,必需在方法的声明和调用中都使用ref修饰符(对形参做的任何更改在对实参上依然有效)

例:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

 

namespace ConsoleApplication1

{

   class MyClass

    {

       public int MyInt = 10;

    }

   

   class Program

    {

       static void MyMethod(ref MyClassa,ref int b)

       {

           a.MyInt=5;

           b=6;

       }

 

       static void Main(string[] args)

       {

           MyClass my = new MyClass();

           int b = 2;

           MyMethod(ref my,ref b);

           Console.WriteLine("{0},{1}", my.MyInt, b);

           Console.ReadKey();

 

       }

    }

}

方法中的输出参数:

在声明和调用中使用out修饰符

例:
using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

 

namespace ConsoleApplication1

{

   class MyClass

    {

       public int MyInt = 10;

    }

   

   class Program

    {

       static void MyMethod(out MyClassa,out int b)

       {

           a = new MyClass();

           a.MyInt = 20;

           b = 1;

       }

 

       static void Main(string[] args)

       {

           MyClass my;

           int b;

           MyMethod(out my,out b);

           Console.WriteLine("{0},{1}", my.MyInt, b);

           Console.ReadKey();

 

       }

    }

}

注:引用参数在输入时需要一个初始值,而输出参数则不需要初始值(且如果有初始值,也会被覆盖掉)

方法中的参数数组:

声明参数数组加修饰符params

例:void listintsparamsint[] invals

{

……………

}

在调用时不使用修饰符

例:listints102030);//调用方法1

int []intArray={1,2,3};

listints(intArray);//调用方法2

 

Class MyClass

{

 public void listints(params int [] intvals)

{

 If((invals!=null)&&(invals.length!=0))

foreach( int i in intvals)

{ invals[i]=invals[i]*10;

Console.writeline(“{0} ”,invals[i])

}

}

}

 

  ClassProgram{

  Staticvoid main()

{

 Intfirst = 5,second=6,third=7;

 MyClassmc=new MyClass();

mc.listints(first,second,third);

console.writeline(“{0} {1} {2}”,first, second, third);

}

 

}

 

此时不改变实参的值,输出 50 60 70 5 6 7

 

当数组作为实参的时候改变原数组中的值。

int[] MyArr =new int[]{5,6,7 };

MyClass mc=new MyClass();

mc.listlints(MyArr);

方法中的命名参数:可以不按照原来的定义数据为方法赋值
方法中的可选参数:

不是所有的参数类型都可以做为可选参数。

1.    只要值类型的默认值在编译的时候可以确定,就可以使用值类型做为可选参数。

2.    只有在默认值是NULL的时候,引用类型才可以做为可选参数来使用。

3.    声明顺序:必填参数,可选参数,数组参数

4.    省略必需是从最后开始的

5.    与命名参数联合使用可以达到任意省略的效果

方法中的帧栈

方法中的递归