java程序员学C#基本语法两个小时搞定(对比学习)(四)

2014-11-24 10:24:20 · 作者: · 浏览: 3
封装类去实现。


值参数、引用参数和输出参数的使用见下例
using System;
class g{public int a=0;}//类定义
class Class1
{ public static void F1(ref char i)//引用参数
{ i='b';}
public static void F2(char i)//值参数,参数类型为值类型
{ i='d';}
public static void F3(out char i)//输出参数
{ i='e';}
public static void F4(string s)//值参数,参数类型为字符串
{ s="xyz";}
public static void F5(g gg)//值参数,参数类型为引用类型
{ gg.a=20;}
public static void F6(ref string s)//引用参数,参数类型为字符串
{ s="xyz";}
static void Main(string[] args)
{ char a='c';
string s1="abc";
F2(a);//值参数,不能修改外部的a
Console.WriteLine(a);//因a未被修改,显示c
F1(ref a);//引用参数,函数修改外部的a的值
Console.WriteLine(a);//a被修改为b,显示b
Char j;
F3(out j);//输出参数,结果输出到外部变量j
Console.WriteLine(j);//显示e
F4(s1);//值参数,参数类型是字符串,s1为字符串引用变量
Console.WriteLine(s1);//显示:abc,字符串s1不被修改
g g1=new g();
F5(g1);//值参数,但实参是一个类引用类型变量
Console.WriteLine(g1.a.ToString());//显示:20,修改对象数据
F6(ref s1);//引用参数,参数类型是字符串,s1为字符串引用变量
Console.WriteLine(s1);//显示:xyz,字符串s1被修改
}
}

4.数组参数
    数组参数使用params说明,
   (1)如果形参表中包含了数组参数,那么它必须是参数表中最后一个参数,数组参数只允许是一维数组。
    比如string[]和string[][]类型都可以作为数组型参数
   (2)数组型参数不能再有ref和out修饰符。见下例:
    using System;
class Class1
{ static void F(params int[] args)//数组参数,有params说明
{ Console.Write("Array contains {0} elements:",args.Length);
foreach (int i in args)
Console.Write(" {0}",i);
Console.WriteLine();
}
static void Main(string[] args)
{ int[] a = {1,2,3};
F(a);//实参为数组类引用变量a
F(10, 20, 30, 40);//等价于F(new int[] {60,70,80,90});
F(new int[] {60,70,80,90});//实参为数组类引用
F();//等价于F(new int[] {});
F(new int[] {});//实参为数组类引用,数组无元素
}

}
程序输出
Array contains 3 elements: 1 2 3
Array contains 4 elements: 10 20 30 40
Array contains 4 elements: 60,70,80,90
Array contains 0 elements:
Array contains 0 elements:
   
    和java中的可变参数用法类似,在传参的时候相同,定义时不同,但是都必须是参数中的最后一个参数
    
5.C#和java中的静态方法和成员方法用法相同
  6. C#的方法和构造器的重载和java的用法相同
  7. 操作符重载:java中操作符不能重载

  操作符重载是将C#语言中的已有操作符赋予新的功能,但与该操作符的本来含义不冲突,
使用时只需根据操作符出现的位置来判别其具体执行哪一种运算。操作符重载,实际是定义了一个操作符函数,操作符函数声明的格式如下:
static public 函数返回类型 operator 重新定义的操作符(形参表)
C#语言中有一些操作符是可以重载的,例如:+ - ! ~ ++ -- true false * / % & | ^ << >> == != > < >= <=等等。
但也有一些操作符是不允许进行重载的,例如:=, &&, ||, :, new, typeof, sizeof, is等。
8.this关键字
   this关键字和java中的this用法一致。
   注意:java中的supper在C#中使用base
  9.类的多态
   C#支持两种类型的多态性,
    第一种是编译时的多态性,一个类的对象调用若干同名方法,系统在编译时,根据调用方法的实参类型及实参的个数决定调用那个同名方法,
    实现何种操作。编译时的多态性是通过方法重载来实现的。
   第二种是运行时的多态性,是在系统运行时,不同对象调用一个名字相同,参数的类型及个数完全一样的方法,会完成不同的操作。
    C#运行时的多态性通过虚方法实现。在类的方法声明前加上了virtual修饰符,被称之为虚方法,反之为非虚方法。
   
   第一种多态写法和java相同,但是用法不同,方法执行时,执行基类的方法
   第二中多态和java写法不同,子类继承的写法也不同,但是和java继承的意义相同。
    基类返回值前用virtual关键字修饰,派生类继承的时候在返回值前加上一个override关键字去修饰。
   
  10:抽象类和抽象方法
     和java对比基本一样,只是在写法上有少许差别,java可以用注解,不知C#是否可以
  11.密封类和密封方法
C#用sealed修饰的类或者方法叫密封类和密封方法,和java中用final修饰的类和方法相同,不能被继承
  12.接口和java中的接口意义和用法几乎相同,
     区别是,C#在接口中可以有方法、属性、索引指示器和事件,不能是常量、域、操作符、构造函数或析构函数,不能包含任何静态成员。
  13.代表
    在这里要介绍的是C#的一个引用类型----代表(delegate),也翻译为委托,可以当做java中的代理,也可以理解成c中的指针的传递
    语法自己去查,比较简单。
  14.事件
事件是C#语言内置的语法,可以定义和处理事件,为使用组件编程提供了良好的基础
  15.事件驱动
    Windows操作系统把用户的动作都看作消息,C#中称作事件,例如用鼠标左键单击按钮,发出鼠标单击按钮事件。
    Windows操作系统负责统一管理所有的事件,把事件发送到各个运行程序。各个程序用事件函数响应事件,这种方法也叫事件驱动。
    和android中的button等view的事件的处理基本类似。
  16.
   索引指示器
   在C#语言中,数组也是类,比如我们声明一个整型数数组:int[] arr=new int[5],实际上生成了一个数组类对象,
   arr是这个对象的引用(地址),访问这个数组元素的方法是:arr[下标],在数组类中,使用索引访问元素是如何实现的呢?
   是否可以定义自己的类,用索引访问类中的数据成员?索引指示器(indexer)为我们提供了通过索引方式方便地访问类的数据成员的方法。
    
   可以这么理解,就是自己定义的数组,可以通过下表访问其中的元素
  17,名字空间或者叫命名空间:namespace。
     用法