一、HelloWorld

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

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace DailyCSHARP20130829

{
class HelloWorld
{
public static void Main()
{
System.Console.WriteLine("Hello World!");
System.Console.ReadLine();
}
}
}

  二、标识符

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

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

  

  三、变量和常量

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

     class A
{
public static int x;
int y;
void F(int[] v, int a, ref int b, out int c) {
int i = ;
c = a + b++;
}
}

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

  四、数据类型

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

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

  例如:

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

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

 int val = ;
object obj = val;
int num = (int) obj;
Console.WriteLine ("num: {0}", num);

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

  

  数据类型转换

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

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

         static void Main()
{
string str1 = "";
int i = System.Convert.ToInt32(str1);
i++;
System.Console.WriteLine(i);
}

  其输出结果为1000。

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

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

  

         foreach(String strkey in envvars.keys)
{
Console.WriteLine();
}

  六、类

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

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

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

 public void ~test{
//清除
}

  方法

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

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

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

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

     override void CanBOverridden()

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

         class Triangle
    {
    public virtual double ComputeArea(int a, int b, int c)
    {
    double s = (a + b + c) / 2.0;
    double dArea = Math.Sqrt(s*(s-a)*(s-b)*(s-c));
    return dArea;
    }
    } class RightAngledTriangle : Triangle
    {
    public override double ComputeArea(int a, int b, int c)
    {
    double dArea = a * b / 2.0;
    return dArea;
    }
    } class TriangleTestApp
    {
    public static void Main()
    {
    Triangle tri = new Triangle();
    Console.WriteLine(tri.ComputeArea(, , ));
    RightAngledTriangle rat = new RightAngledTriangle();
    Console.WriteLine(rat.ComputeArea(, , ));
    }
    }

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

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

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

  七、异常处理

  1. 校验和非校验语句:

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

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

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

  2.  异常处理语句:

    • 使用try和catch捕获异常:try语句中包含容易产生异常的代码,接着就是捕获异常。无论异常什么时候发生,在catch段里的代码会进行适当的处理。一般化异常处理代码

       try
      {
      ...
      } catch(System.Exception e)
      {
      ...
      }

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

    • 使用try和finally清楚异常:这里只关心清除而不是错误处理。它不仅抑制出错信息,而且所有包含在finally块中的代码在异常被引发后仍然会被执行。
    • 使用try-catch-finally处理所有异常:下例显示了处理零除错误的途径:
           class CatchIT
      {
      public static void Main()
      {
      try
      {
      int nTheZero = ;
      int nResult = / nTheZero;
      }
      catch (DivideByZeroException divEx)
      {
      Console.WriteLine("divide by zero occured!");
      }
      catch (Exception Ex)
      {
      Console.WriteLine("some other exception");
      }
      finally
      {
      }
      }
      }

  3. 引发异常:

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

 throw ExObject;

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

    实例代码如下:

 using System;
class Program
{
static void Main()
{
int[]array = new int[];
try
{
for (int i = ; i < ; i++)
{
array[i] = i;
if (i < array.Length)
throw new IndexOutOfRangeException();
}
}
catch (IndexOutOfRangeException e)
{
Console.WriteLine(e.Message);
}
}
}

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

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

Copyright ©2013 BITED.All rights reserved.

BITED程序员语言学习心得之:C#语言基础的更多相关文章

  1. 《C语言入门1.2.3—一个老鸟的C语言学习心得》—清华大学出版社炮制的又一本劣书及伪书

    <C语言入门1.2.3—一个老鸟的C语言学习心得>—清华大学出版社炮制的又一本劣书及伪书 [薛非评] 区区15页,有80多个错误. 最严重的有: 通篇完全是C++代码,根本不是C语言代码. ...

  2. PHP程序员进阶学习书籍参考指南

    PHP程序员进阶学习书籍参考指南 @heiyeluren lastmodify: 2016/2/18     [初阶](基础知识及入门)   01. <PHP与MySQL程序设计(第4版)> ...

  3. .net程序员的学习计划

    .net程序员的学习计划 与其说是计划,不如说是抄来的课程表.基于最近老大要求写一份一年的职业规划.我是一个向来没什么规划的人,不是职场规划,就连平时的规划都没有,基本上就是有什么任务就去完成.回想起 ...

  4. 程序员谈学习:我为什么要学习Linux?

    http://kb.cnblogs.com/page/196876/ 好长时间没好好写点东西了,前段时间由于项目的需要出差了一个多月,期间各种加班,每天晚上加班到十点,回到宾馆实现是没什么精力再写博客 ...

  5. PHP开发程序员的学习路线

    PHP开发程序员的学习路线 兄弟连PHP培训,简单为大家梳理了每个阶段PHP程序员的技术要求,来帮助很多PHP程序做对照设定学习成长目标. 第一阶段:基础阶段(基础PHP程序员) 重点:把LNMP搞熟 ...

  6. GJM : 游戏程序员的学习之路

    原文作者:miloyip  原帖地址:http://gad.qq.com/article/detail/7180681 原帖备注:版权所有,禁止匿名转载:禁止商业使用:禁止个人使用. 腾讯前端技术总监 ...

  7. zz 游戏程序员的学习之路(中文版)

    游戏程序员的学习之路(中文版) Milo Yip · 1 天前 感谢 @楚天阔(tkchu)编写脚本及整理中文译本数据,自动从英文版生成中文版,SVG / PDF 版本中的书籍图片现在链接至豆瓣页面. ...

  8. 2020年Java程序员应该学习的10大技术

    对于Java开发人员来说,最近几年的时间中,Java生态诞生了很多东西.每6个月更新一次Java版本,以及发布很多流行的框架,如Spring 5.Spring Security 5和Spring Bo ...

  9. 迈向高阶:优秀Android程序员必知必会的网络基础

    1.前言 网络通信一直是Android项目里比较重要的一个模块,Android开源项目上出现过很多优秀的网络框架,从一开始只是一些对HttpClient和HttpUrlConnection简易封装使用 ...

随机推荐

  1. js中indexOF和lastIndexOf

    indexOFindexOf() 方法返回某个指定的字符串值在字符串中首次出现的位置(从左向右).没有匹配的则返回-1,否则返回首次出现位置的字符串的下标值. var src="images ...

  2. Python 中 os.path模板

    os.path.abspath(path) #返回绝对路径 os.path.basename(path) #返回文件名 os.path.commonprefix(list) #返回list(多个路径) ...

  3. What is Entity Framework?

    1.什么是EntityFramework? http://www.entityframeworktutorial.net/what-is-entityframework.aspx Writing an ...

  4. hibernate lazy=false annotation设置

    工程报错如下: org.hibernate.LazyInitializationException: could not initialize proxy - no Session 解决方法: 在类的 ...

  5. c#Winform程序,让pictureBox显示图像(包含GIF),并且不被占用,能即时删除图片。

    最近在做一个图片浏览的工具, 需要在PictureBox中显示图像文件, 包括gif播放.  且不能被程序独占, 就算winform的程序正在显示这张图, 也能在资源管理器里delete它. 看了看网 ...

  6. OK335xS ethtool 移植

    /******************************************************************* * OK335xS ethtool 移植 * 声明: * 由于 ...

  7. xcode安装app

    安装 xcode 安装 xcode command line tool 检查是否安装 在终端中运行: xcrun simctl list 如果出现所有的 Device Types,则可以进行第3步 如 ...

  8. Spark 问题总结

    1 创建hive外部表 其实这个问题应该是hive的问题.就是外部表在创建的时候需要指定目录.举例说明 我们要创建一个外部表,其来源是test_tab这个文件,那么在LOCATION处是不是这样写呢? ...

  9. swun 1397 来电显示

    解题思路:这题最关键的是要注意当输入的数据,00123,0000等这些情况, 刚开始用long long, WA了好几发,非常迷茫,后来突然想起特殊数据, 用字符串,则轻松解决问题.顺便多说两句:当你 ...

  10. 【Django】Python虚拟环境工具virtualenv

    教程 第一步:安装virtualenv $pip install virtualenv 第二步:开启虚拟环境的python $cd ENV/Scripts $activate.bat #启用virtu ...