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

 

原文地址:https://www.cnblogs.com/mybkn/p/2766627.html