C# 类定义的最后不需要加上一个分号,但是加上一个分号编译也能通过.
访问修饰符:
public
private
protected
internal
protected internal= protected U internal
private是默认的访问级别,可以不显式地指定,但是为了代码的可读性等考虑,最好显式指定.
参数: parameter VS. argument... 通常parameter指形参,argument指实参
C#中引用类型一般包括 类,接口,字符串,数组.
创建对象
值类型是在栈中创建的,而对象是引用类型,创建于堆中,需要使用关键字new,如下:
Time t=new Time();
t实际上不保存Time对象的值,它保存的是堆中创建的这个对象的地址(引用).
类的成员变量的初始值可以用初始化语句来设置,用初始化语句初始的值会被构造函数赋予的值覆盖.
public class example
{
private test=1;//初始化语句
}
C#中没有拷贝构造函数,这种语法是通过ICloneable接口来实现的.
this关键字
this关键字指向对象的当前实例. this引用(或者叫this指针)作为参数隐式传递给类中所有非静态方法, 每个方法都能通过this引用指向对象的其他方法和变量.
this引用的典型用法很多. 第一种就是用于修饰被参数(parameter)隐藏的实例成员.见下例:
public void SomeMethod(int hour)
{
this.hour=hour;
}
上面这个例子中SomeMethod()方法收到一个与类成员变量同名的参数(hour),this引用可以解决这种名字混淆的问题。this.hour指的是成员变量,hour指的是参数。
this引用的第二种用法是把当前对象作为参数传递给别的方法。
class myclass
{
public void foo(otherclass otherobject)
{
otherobject.fun1(this);
}
}
这样otherobject的fun1方法就可以使用myclass的当前实例的公开方法和成员了。
this引用的第三种用法与索引器有关,目前还不知道怎么回事。
this引用的第四种用法是在一个构造函数中调用另外一个重载(overloaded)的构造函数。比如:
class MyClass
{
public MyClass(int i){...}
Public MyClass():this(8){...}
}
上面的例子中,第二个构造函数通过使用this关键字调用了第一个带整形参数的构造函数。
最后一种使用this关键字的方法是显式调用一个类的方法和成员,作为文档的一种形式吧(使程序更可读一些)
使用静态成员
静态成员是类的一部分,而不象实例成员一样与某类型的实例有关。 在C#中通过实例访问静态方法或者成员变量是不合法的,这一点与C++是不一样的,要注意。
静态构造方法前没有访问修饰符。静态构造方法有啥用还不知道。。
C#中通过引用调用的写法:
public void GetTime(ref int hour, ref int minute,ref int second)
{
hour=this.hour;
minute=this.minute;
second=this.second;
}
调用该函数的语句也应该写成t.GetTime(ref theHour, ref theMinute, ref theSecond);
这样,GetTime()方法的参数就可以被修改了。
通过ref传递的变量必须在调用之前赋值。
out参数类似于ref参数,只有一点除外,它只能用于从方法传出值。在调用方法之前,不必给作为out参数使用的变量赋初始值。另外在方法内,out参数总认为是未赋值的,而在方法终止之前,它必须给参数赋值。
用属性封装数据
属性用来做什么的?
答:通过属性,客户代码可以访问对象的状态,而且看上去就像直接访问成员变量一样,但其实是通过类的方法实现的.
客户想直接访问对象的状态,不想处理方法,但是这是违背面向对象的封装精神的,所以C#的设计者设计了属性(property)来处理这一问题.
所谓属性,其实就是将成员变量与访问他的方法相结合.
静态公共常数:
public static readonly int year;
这样,year就被标示为常数了.