博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#初识
阅读量:5201 次
发布时间:2019-06-13

本文共 3461 字,大约阅读时间需要 11 分钟。

     因为要看看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];orint [,]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

 13、using 

using在c#中有三种用法:

a、引用命名空间

b、创建别名:

    e.g.:

using MSWord = Microsoft.Office.Interop.Word;

 

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

c、强制资源管理

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

check:

 14、 List.AddRange 方法

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

命名空间:System.Collections.Generic

程序集:mscorlib(在 mscorlib.dll 中)

check:

 

 

 

转载于:https://www.cnblogs.com/mybkn/archive/2012/11/12/2766627.html

你可能感兴趣的文章
知识不是来炫耀的,而是来分享的-----现在的人们却…似乎开始变味了…
查看>>
vim在同一个窗口中同时编辑多个文件
查看>>
CSS背景颜色、背景图片、平铺、定位、固定
查看>>
Linux相关——记一些ubuntu相关快捷键&操作(持续更新)
查看>>
口胡:[HNOI2011]数学作业
查看>>
我的第一个python web开发框架(29)——定制ORM(五)
查看>>
Java中写文件操作
查看>>
js,jquery,css,html5特效
查看>>
python 进程池Pool以及Queue的用法
查看>>
while 循环、格式化输出、运算符
查看>>
Combination Sum III -- leetcode
查看>>
中国剩余定理
查看>>
MongoDB一些基本的命令
查看>>
尚未为数据源“RptDataSet_StatEC”提供数据源实例
查看>>
IP通信基础课堂笔记------第三章(重点)
查看>>
POJ 1410 Intersection
查看>>
Linux服务部署:nginx服务 nfs服务
查看>>
Spring Boot热部署(springloader)
查看>>
我要写一篇动态计算tableView-cell高度的随笔
查看>>
2.2 数据库高速缓冲区
查看>>