zoukankan      html  css  js  c++  java
  • C#语言基础

    C#语言基础

     一、HelloWorld

      我们先来看看最简单的C#代码——HelloWorld:

    复制代码
     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 
     7 namespace DailyCSHARP20130829
    
    8 { 9 class HelloWorld 10 { 11 public static void Main() 12 { 13 System.Console.WriteLine("Hello World!"); 14 System.Console.ReadLine(); 15 } 16 } 17 }
    复制代码

     

      二、标识符

      然后我们说说C#标识符。标识符的命名规则有三:

    1. 类名和函数名用大写字母开头的单词组成。
    2. 变量和参数用小写字母开头的单词组成。
    3. 常量用全用大写的单词,用下划线分隔单词。

      

      三、变量和常量

      我们通过以下一段代码来认识C#的各种变量类型。

    复制代码
    1     class A
    2     {
    3         public static int x;
    4         int y;
    5         void F(int[] v, int a, ref int b, out int c) {
    6             int i = 1;
    7             c = a + b++;
    8         }
    9     }
    复制代码

      其中x是静态变量,y是实例变量,v[0]是数组元素,a是数组参数,b是引用参数,c是输出参数,i是局部变量。

      四、数据类型

      数组在声明时不能指定大小。

      装箱和拆箱装箱和拆箱是一个抽象的概念 ,装箱是将值类型转换为引用类型 ;拆箱是将引用类型转换为值类型利用装箱和拆箱功能,可通过允许值类型的任何值与Object 类型的值相互转换,将值类型与引用类型链接起来

      例如: 

    1 int val = 100; 
    2 object obj = val; 
    3 Console.WriteLine (“对象的值 = {0}", obj); 

      这是一个装箱的过程,是将值类型转换为引用类型的过程。

    1 int val = 100; 
    2 object obj = val; 
    3 int num = (int) obj; 
    4 Console.WriteLine ("num: {0}", num); 

      这是一个拆箱的过程,是将值类型转换为引用类型,再由引用类型转换为值类型的过程。
      注:被装过箱的对象才能被拆箱!

      

      数据类型转换

      除了显式转换、隐式转换,我们还可以用Convert类进行转换。

      Convert类的每个ToXXX方法都能够把一个值转换为一个基本的.NET类型,例如:

    复制代码
    1         static void Main()
    2         {
    3             string str1 = "999";
    4             int i = System.Convert.ToInt32(str1);
    5             i++;
    6             System.Console.WriteLine(i);
    7         }
    复制代码

      其输出结果为1000。

     

      五、语句、运算符和表达式

      foreach语句:为数组或对象集合中的每个元素重复一个嵌入语句组。

      

    1         foreach(String strkey in envvars.keys)
    2         {
    3             Console.WriteLine();
    4         }

      六、类

      构造函数:总是public的,且和它的类名相同。

    1     class test
    2     {
    3         public test():base { }//由编译器提供
    4     }

      析构函数以类名的前面加上“~”的方式命名,以释放这些资源。

    1 public void ~test{
    2    //清除     
    3 }

      方法

    1. 输入参数:一般情况下,如果没有设定,输入参数总是用值传递。
    2. 引用参数:例如:
      1 void myMethod(ref int nInOut)


      因为传递了一个变量给该方法(不仅是它的值),变量必须被初始化,否则编译器会报警。使用引用参数,定义和调用都加上ref限定符。

    3. 输出参数:out 类型 变量名
    4. 改写方法:程序员可以用virtual关键字设计方法:
      1 virtual void CanBOverridden()

      当从基类派生时,派生类要做的就是在新方法中加入override关键字:

      1 override void CanBOverridden()

      以下展示一个改写基类的方法:

      复制代码
       1     class Triangle
       2     {
       3         public virtual double ComputeArea(int a, int b, int c)
       4         {
       5             double s = (a + b + c) / 2.0;
       6             double dArea = Math.Sqrt(s*(s-a)*(s-b)*(s-c));
       7             return dArea;
       8         }
       9     }
      10 
      11     class RightAngledTriangle : Triangle
      12     { 
      13         public override double ComputeArea(int a, int b, int c)
      14         {
      15             double dArea = a * b / 2.0;
      16              return dArea;
      17         }
      18     }
      19 
      20     class TriangleTestApp
      21     {
      22         public static void Main()
      23         {
      24             Triangle tri = new Triangle();
      25             Console.WriteLine(tri.ComputeArea(2, 5, 6));
      26             RightAngledTriangle rat = new RightAngledTriangle();
      27             Console.WriteLine(rat.ComputeArea(3, 4, 5));
      28         }
      29     }
      复制代码

      当我需要调用基类时可以用:

      1 dArea = base.ComputeArea(a,b,c);//用base来实现
    5. 方法屏蔽:重定义方法的另一种方法就是屏蔽基类的方法。当从基类派生类时,此功能特别有用。下面给出一个例子演示如何运用new修饰符。(屏蔽基类方法)
      复制代码
       1     class BaseClass
       2     {
       3         public void TestMethd() 
       4         {
       5             Console.WriteLine("Base");
       6         } 
       7     }
       8 
       9     class DerivedClass : BaseClass
      10     {
      11         new public void TestMethod() 
      12         {
      13             Console.WriteLine("Derived");
      14         }
      15     }
      复制代码

      这种行为不同于之前所说的改写方法,后者能保证大部分派生方法获得调用。

      七、异常处理

    1. 校验和非校验语句:

      C#自动处理溢出情况,而不明确的发出警告。通过给整个应用程序(经编译器开关)或语句级允许溢出校验,就可以改变这种情况。

    复制代码
    1 //运行以下编译器指令,可以达到给整个应用程序控制溢出校验
    2 csc factorial.cs /cheacked+
    3 
    4 //checked为语法溢出校验,unchecked为非校验
    5 checked {}
    6 unchecked{}
    复制代码

      unchecked即如果允许了溢出校验,被unchecked的语句所括住的代码将不会引发溢出校验。

     

      2.  异常处理语句:

      • 使用try和catch捕获异常:try语句中包含容易产生异常的代码,接着就是捕获异常。无论异常什么时候发生,在catch段里的代码会进行适当的处理。一般化异常处理代码
        复制代码
        1 try
        2 {
        3 ...
        4 }
        5 
        6 catch(System.Exception e)
        7 {
        8 ...
        9 }
        复制代码

        但要注意的是,不能使用ref和out修饰符传递e对象给一个方法,也不能赋给他一个不同的值。

      • 使用try和finally清楚异常:这里只关心清除而不是错误处理。它不仅抑制出错信息,而且所有包含在finally块中的代码在异常被引发后仍然会被执行。
      • 使用try-catch-finally处理所有异常:下例显示了处理零除错误的途径:
        复制代码
         1     class CatchIT
         2     {
         3         public static void Main()
         4         {
         5             try
         6             {
         7                 int nTheZero = 0;
         8                 int nResult = 10 / nTheZero;
         9             }
        10             catch (DivideByZeroException divEx)
        11             {
        12                 Console.WriteLine("divide by zero occured!");
        13             }
        14             catch (Exception Ex)
        15             {
        16                 Console.WriteLine("some other exception");
        17             }
        18             finally
        19             { 
        20             }
        21         }
        22     }
        复制代码

      3. 引发异常:

      C#提供了throw语句来引发异常。使用throw语句既可以引发系统异常,也可以引发自定义异常。使用throw语句抛出异常的语法如下: 

    1 throw ExObject;

        ExObject:所要抛出的异常对象,这个异常对象是派生自System.Exception类的类对象。

        实例代码如下:

    复制代码
     1 using System;
     2 class Program
     3 {
     4 static void Main()
     5 {
     6     int[]array = new int[4];
     7     try
     8     {
     9       for (int i = 0; i < 5; i++)
    10       {
    11         array[i] = i;
    12         if (i < array.Length)
    13           throw new IndexOutOfRangeException();
    14       }
    15     }
    16     catch (IndexOutOfRangeException e)
    17     {
    18       Console.WriteLine(e.Message);
    19     }
    20 }
    21 }
    复制代码

      下面列出runtime提供的标准异常:

      Exception                                                所有异常对象的基类
      SystemException                                         运行时产生的所有错误的基类
      IndexOutOfRangeException                              当一个数组的下标超出范围时运行时引发
      NullReferenceException                                 当一个空对象被引用时运行时引发
      InvalidOperationException                              当对方法的调用对对象的当前状态无效时,由某些方法引发
      ArgumentException                                         所有参数异常的基类
      ArgumentNullException                                    在参数为空(不允许)的情况下,由方法引发
      ArgumentOutOfRangeException                        当参数不在一个给定范围之内时,由方法引发
      InteropException                                         目标在或发生在CLR外面环境中的异常的基类
      ComException                                            包含COM 类的HRESULT信息的异常
      SEHException                                             封装win32 结构异常处理信息的异常

    Copyright ©2013 BITED.All rights reserved.

     
     
    标签: BITEDC#编程语言
  • 相关阅读:
    Gym
    struts2.5 使用感叹号和通配符实现动态方法调用无效的问题及解决!
    Offfice 多重版本key残留并存的异常问题
    IDEA Struts2 truts-default显红的解决办法
    Struts2的库在 IDEA 的外联库就会报错,不知道为什么。
    计算机二级python 知识点篇(第三方库)
    计算机二级python 知识点篇(python标准库)
    计算机二级python 知识点篇(内置函数整理)
    计算机二级python 知识点篇(文件和数据格式化)
    计算机二级python 知识点篇(组合数据类型)
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3295675.html
Copyright © 2011-2022 走看看