zoukankan      html  css  js  c++  java
  • C#初识

         因为要看看Monocross的东西,用它去实现移动开发的跨平台。Monocross是利用C# .net 去做的,所以就看了下C#,C#与C++及java都蛮相似,但也有其一些独特的东西,稍稍小结如下:

    1、C#是一门建立在C++和java基础上的面向对象的跨平台语言,但与java不同的是,C#的跨平台不是依赖于JVM,而是.net framework,这是C#与java的本质差别。

    java编译后形成字节代码,这些代码需要在jre(java runtime environment)下提供的JVM上运行;C#程序也被编译成IL(intermediate Language),运行在.net framework 的公共语言运行时(Common Language Runtime)。

    2、C#抛弃了C++中指针,禁止直接的内存操作。

    3、C#的全部代码都属于类和对象的代码,不存在全局变量、全局函数的概念。继承方面,C#只允许单继承。

    4、强大的web应用支持;对XML的高度支持;

    5、二维数组:

       e.g.定义一个二维整型数组a:

    int [,]a;
    a = new int[2,3];
    or
    int [,]a = new int[2,3]{{1,2,3},{4,5,6}};

    6、枚举:
         

    int[] a ={1,2,3,4};
    foreach(int i in a)
    {
         Console.WriteLine(i);  
    }

    7、类的概念及继承、重载、多态的概念与C++类似。

       在派生类中访问基类中的成员,用base.xxx 。

       派生类D的构造函数调用基类C中的重载的构造函数: public D(int x, int y,int z) : base(x,y) {this.z = z;}

    8、接口:

    interface I
    {
          void f(int x);  
    }
    class A: I
    {
        public void f(int x)
        {
    
        }
    }

    接口声明:

    interface I1
    {
       void f(int x);                   //方法
       int att{get;set;}           //属性,可读写
       event EventHandler OnDraw; //事件
       string this [int index] {get; set;}  //索引器
    }

    9、方法的委托:这是C#的特有的功能。

    using System;
    namespace simpleDelegatePro
    {
        delegate void MyDelegate(string s);
        class A
        {
              public void f (sting msg)
            {
                Console.WriteLine(msg);
            }
              public static void g (sting msg)
            {
                Console.WriteLine(msg);
            } 
        }
        class B
        {
            public void h (MyDelegate m)
            {
                 m("通过委托传递过来的是方法"+m.Method.Name+",这是调用该方法输出的结果.");
            }
        }
        
         class Program
        {
              MyDelegate gd  = new MyDelegate(A.g);
              // 此后,“gd” 与“A.g” 同等,同一个函数名
             
              A a = new A();
               MyDelegate fd  = new MyDelegate(a.f);
              // 此后,“fd” 与“a.g” 同等,同一个函数名
               
             gd("这里是静态方法A.g()的委托gd输出的结果");
             //等效于A.g("这里是静态方法A.g()的委托gd输出的结果");
    
            Console.WriteLine("");
    
             fd("这里是对象a的方法f()的委托fd输出的结果");
             //等效于a.f("这里是对象a的方法f()的委托fd输出的结果");
    
            Console.WriteLine("");
            B b = new B();
            b.h(fd);       //通过委托将方法a.f传到方法b.h中
    
            Console.ReadKey(); 
             }
            
        }
    }

     最终输出的结果是:

    这里是静态方法A.g()的委托gd输出的结果
    这里是对象a的方法f()的委托fd输出的结果
    通过委托传递过来的是方法f,这是调用该方法输出的结果.

     委托的声明:

           属性 修饰符 delegate 返回类型 委托类型名(参数列表)

    属性、修饰符是可选项,可选的修饰符包括new public internal protected private

    属性列表和返回类型共同决定了委托能过关连的一组方法。

    委托的实例化:

     委托对象 = new 委托类型(关联方法);

    委托的引用:

    在创建委托后,通过引用该对象可以实现对其关联方法的调用,简而言之,就是把委托对象名当作方法名来使用。

    委托的组合:

     委托作为一种组合,它比C/C++中的函数指针的功能强得多,例如,委托可以做组合。

    delegate string MyDelegate(int n);
    MyDelegate a,b,c,d;
    //在对a,b,c,d进行赋值后,可以进行下面的运算
    d = a + b + c; // 委托组合
    d = d - a ;

    这时调用d就是调用其包含的所有委托,并将d的参数值传递给这些委托。如果关联的方法具有返回值,则组合的委托d返回委托列表中最后一个委托的返回值。

     10、命名空间

    命名空间是C#中一个重要的概念,它为程序逻辑结构提供了一种组织方式。

    命名空间的声明:

    namespace 命名空间名
    {
         命名空间成员;
    }

    如果在一个命名空间中访问另外一个命名空间的成员,需通过命名空间名实现:  命名空间名.命名空间成员

    命名空间的导入:

    using 命名空间名;            //相当于java的import

     11、is & as

    C#中的is操作符与Java中的instanceof操作符一样,两者都可以用来测试某个对象的实例是否属于特定的类型。

    在Java中没有与C#中的as操作符等价的操作符。as操作符与is操作符非常相似,但它更富有“进取心”:如果类型正确的话,as操作符会尝试把被测试的对象引用转换成目标类型;否则,它把变量引用设置成null。

    比如:两个类:A和B
    B b = new B();
    //不用as,进行强制转换,如果类型不匹配,会引发转换异常
    A a = (A) b;
    //使用as,类型不匹配,不会引发异常,会返回一个null,此时 a = null
    A a = b as A;

     12、attribute

    http://www.cnblogs.com/-dawn/archive/2012/09/29/2708053.html

     13、using 

    using在c#中有三种用法:

    a、引用命名空间

    b、创建别名:

        e.g.:

    using MSWord = Microsoft.Office.Interop.Word;  

        好处:避免繁琐;解决同一个.cs文件中引用不同命名空间但是类名有相同的问题。

    c、强制资源管理

    用途:清理非托管资源,不受GC控制的资源。Using结束后会隐式的调用Disposable方法。相当于调用了一个局部的子程序。

    check:http://developer.51cto.com/art/201105/263550.htm

     14、 List.AddRange 方法

    将指定集合的元素添加到 List 的末尾。

    命名空间:System.Collections.Generic
    程序集:mscorlib(在 mscorlib.dll 中)

    check:http://msdn.microsoft.com/zh-cn/library/z883w3dc(v=vs.80).aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-4

     

  • 相关阅读:
    最基础的账户余额要怎么在 mysql 实现?
    跳跃表时间复杂度分析推导
    Redis:RDB 中 fork 的使用
    字段、约束和索引在存储过程中的判断
    高效沟通的基本流程
    人月神话--画蛇添足
    课程评价及加分项
    人月神话--提纲挈领
    热词搜索七
    《大道至简:软件工程实践者的思想》
  • 原文地址:https://www.cnblogs.com/mybkn/p/2766627.html
Copyright © 2011-2022 走看看