当前位置:编程学习 > C#/ASP.NET >>

C#基础知识回顾

今天在一个网站看到了一篇关于C#基础知识的文章,篇幅很长,浏览了一下,确实是基础知识,虽然顺序凌乱,没有章法,但是对于我们经常写代码的人确实应该尽量多的记住一些基础知识。 掌握牢固的基础知识编程才能得心应手,最基本的东西也应该注重,因为细节决定成败。
 

引用类型是类型安全的指针,它们的内存是分配在堆(保存指针地址)上的。
string、数组、类、接口和委托都是引用类型。


强制类型转换与as类型转换的区别:当类型转换非法时,强制类型转换将抛出一个system.invalidcastexception异常,
而as不会抛出异常,它返回一个null值。

用using创建别名:


using console = system.console; 
using console = system.console;
访问限定符:
public  该成员可以被其他任何类访问
protected 该成员只能被其派生类访问
private  该成员只能被本类的其他成员访问
internal 该成员只能在当前编译单元的其他成员访问

带参数列表和返回值的main方法:


class test 

  public static int main(string[] args) 
  { 
    int value=0; 
 
    foreach (string arg in args) 
    { 
    ... 
    } 
    return value; 
  } 

class test
{
  public static int main(string[] args)
  {
    int value=0;

    foreach (string arg in args)
    {
    ...
    }
    return value;
  }
}
构造函数(constructor)包括实例构造函数和静态构造函数。
构造函数与类名相同,且不能有返回值。例:


class testclass 

  testclass()  //实例构造函数:可以访问静态成员和实例成员,用于初始化实例成员  
  { 
  ... 
  } 
 
  static testclass() //静态构造函数:只能访问静态成员,用于初始化静态成员  
  { 
  ... 
  } 

class testclass
{
  testclass()  //实例构造函数:可以访问静态成员和实例成员,用于初始化实例成员
  {
  ...
  }

  static testclass() //静态构造函数:只能访问静态成员,用于初始化静态成员
  {
  ...
  }
}
类的静态成员属于类所有,不必生成实例就可以访问,它是在载入包含类的应用程序时创建的,
但静态方法不能访问类的实例变量和方法。通常,静态变量是在定义时就赋初始值的。
类的实例成员属于类的实例所有,不创建实例对象就无法对其进行访问,实例成员可以访问类的
静态成员和其它实例成员。
调用基类的析构函数:


class a 

  public a() 
  { 
  ... 
  } 

 
class b 

  public b(): base()  //调用基类的析构函数  
  { 
  ... 
  } 

class a
{
  public a()
  {
  ...
  }
}

class b
{
  public b(): base()  //调用基类的析构函数
  {
  ...
  }
}
常量:其值是在编译时设定的,必须是数值文字。默认状态下常量是静态的。例:


class a 

  public const double pi = 3.1415; 

class a
{
  public const double pi = 3.1415;
}
常量是编译时就确定的值,只读字段是在运行才能确定的值。比如运行时才能确定的屏幕分辨率。
只读字段只能在类的析构函数中赋值。

静态只读字段:www.zzzyk.com


class a 

  public static readonly int screenwidth;  //静态只读字段  
  static a()   //静态析构函数  
  { 
    screenwidth = 1024;  //在静态析构函数中初始化  
  } 

class a
{
  public static readonly int screenwidth;  //静态只读字段
  static a()   //静态析构函数
  {
    screenwidth = 1024;  //在静态析构函数中初始化
  }
}
在类的继承中,类的析构函数是不会被继承的。
一个派生类只能从一个基类继承,不能同时从多个基类继承,但可以通过继承多个接口来
达到相同目的。实现多继承的唯一方法就是使用接口。例:


class myfancygrid: control, iserializable, idatabound 

... 

class myfancygrid: control, iserializable, idatabound
{
...
}
密封类是不能继承的类,抽象类不能被定义为密封类,且密封类的私有成员不能用protected修饰,
只能用private。例:


sealed class a 

... 

sealed class a
{
...
}
关键字ref和out用于指定用引用方式传递方法的参数。
它们的区别是:ref参数必须初始化,而out参数不需要初始化。所以在方法处理代码依赖参数的
初始化值时使用ref,不依赖初始化值时使用out。
对out参数即使在传递前对其进行了初始化,其值也不会传递到方法处理函数内部。传递时系统
会将其设为未初始化。所以在方法内部必须对out参数进行初始化。


方法重载时,必须参数数目和参数类型其中之一不同,返回值不同不能作为重载。
c#不支持方法的默认值,只能通过方法重载来实现。例:


class a 

  int method(int a) 
  { 
  ... 
  } 
 
  void method(int a, int b) //参数数目不同  
  {    //返回值不同不能作为重载  
  ... 
  } 

class a
{
  int method(int a)
  {
  ...
  }

  void method(int a, int b) //参数数目不同
  {    //返回值不同不能作为重载
  ...
  }
}
params参数用于一个不定数目参数的方法,一般后面跟一个数组。例: 
class a 

  public void method(params int[] i) 
  { 
  ... 
  } 

params参数用于一个不定数目参数的方法,一般后面跟一个数组。例:
class a
{
  public void method(params int[] i)
  {
  ...
  }
}
方法的覆盖:指派生类覆盖基类的同名方法,有二种方法
1)第一种是在派生类要覆盖的方法前面加new修饰,而基类不需要作任何改动。
这种方法的缺点是不能实现多态。例:


class a 

  public void method()  //无需任何修饰  
  { 
  ... 
  } 

 
class b: a   //从基类继承  

  new public void method() //覆盖基类的同名方法  
  { 
  ... 
  } 

 
class testclass 

  a instance = new b(); 
  instance.method();  //这时将调用类a的method方法,而不是类b的method方法  

class a
{
  public void method()  //无需任何修饰
  {
  ...
  }
}

class b: a   //从基类继承
{
  new public void method() //覆盖基类的同名方法
  {
  ...
  }
}

class testclass
{
  a instance = new b();
  instance.method();  //这时将调用类a的method方法,而不是类b的method方法
}
2)第二种是在派生类要覆盖的方法前面加override修饰,而基类的同名方法前面加virtual修饰。
这样就能实现多态,

补充:软件开发 , C# ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,