C#学习笔记(五):类成员的定义
2006-01-10 13:30 努力学习的小熊 阅读(1074) 评论(0) 编辑 收藏 举报一、定义域
标准的声明格式:
class MyClass
{
public int MyInt;
}
这种声明格式的成员是可以对其进行初始化的。但是它是Myclass的公有成员,可在实例化Myclass的对象后进行初始化或修改操作。
MyClass myClass = new MyClass();
myClass.MyInt = 1;
域(成员)也可以使用readonly关键字声明,表示这个域(成员)只能在执行构造函数的过程中赋值,或由初始化赋值语句赋值。
class MyClass
{
public readonly int MyInt;
public MyClass()
{
MyInt = 1;
}
}
或
class MyClass
{
public readonly int MyInt = 2;
}
如果我们使用关键字static将域声明为静态。
class MyClass
{
public static int MyInt;
}
我们要访问这个域(成员)则只能通过定义它的类来访问,通过类的对象实例是访问不到的。
MyClass.MyInt = 10;
Console.WriteLine("{0}",MyClass.MyInt);
二、定义方法
方法的使用和域基本一样,同样在使用了static关键字后,这个方法就只能通过类来访问,不能通过对象实例来访问。
例1:
class MyClass
{
public string GetString()
{
return "Here is a string.";
}
}
MyClass myClass = new MyClass();
Console.WriteLine("{0}",myClass.GetString());
例2:
class MyClass
{
public static string GetString()
{
return "Here is a string.";
}
}
Console.WriteLine("{0}",MyClass.GetString());
但在方法的定义中,还可以使用以下几个关键字:
virtual:方法可以重写。
abstract:方法必须重写(只用于抽象类中)。
override:方法重写了一个基类方法(如果方法被重写,就必须使用关键字)。
extern:方法定义放在其他地方。
下面展示一个重载的例子:
public class MyBaseClass
{
public virtual string DoSomething()
{
return "Old action.";
}
}
public class MyDerivedClass : MyBaseClass
{
public override string DoSomething()
{
return "New action.";
}
}
class Class1
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void
{
MyBaseClass oldthing = new MyBaseClass();
Console.WriteLine("{0}",oldthing.DoSomething());
MyDerivedClass newthing = new MyDerivedClass();
Console.WriteLine("{0}",newthing.DoSomething());
}
}
运行结果为:
我们在重写或定义方法的同时,如果使用了override关键字,那么我们也可以同时使用sealed关键字。使得派生类不能对此方法进行重载。大家请看下图:
我们在定义MyDerivedClass类中的DoSomething方法时没有使用sealed关键字,所以我们可以在它的派生类testOverride中重载这个方法。继续往下看:
这时,我们在定义MyDerivedClass类中的DoSomething方法使用了sealed关键字,实现了将这个方法进行密封,使得其派生类不能对这个方法进行重载。
三、定义属性
属性拥有两个类似于函数的块,一个块用于获取属性的值,另一个块用于设置属性的值。忽略get块创建只写属性,忽略set块创建只读属性。
private int intVal;
public int Val
{
get
{
return intVal;
}
set
{
if(value>=0 && value <=10)
intVal = value;
else
throw(new ArgumentOutOfRangeException("Val",value,"Val must be assigned a value between 0 and 10."));
}
}