基本语法部分:
成员的访问级别确定成员的使用范围,常用下面的关键字:
public--成员可以由任何代码访问
private--只能由类中的代码访问
internal--只能由定义它的项目内部的代码访问
protected--成员只能由类或派生类中的代码访问
字段的定义:class myClass{ public int MyInt } 如果该属性是只读的,就需要加关键字 readonly,加了该关键字之后,只能在构造函数内为其赋值。
方法的定义:方法在定义时使用标准函数的格式,static为可选修饰符来声明。class myClass{ public string GetString() { return "Here is a string." } }。在定义方法时,使用的关键字可以有以下几个:
virtual--方法可重写
abstract--方法必须在非抽象的派生类中重写(只用于抽象类中)
override--重写一个基类方法
extern--方法定义放在其他地方
属性的定义:属性在定义时,格式跟字段类似,但与之不同的是有get 和set语句块用来获取属性值。
语法为:public int MyIntProp{ get { } set { }}
如:public int MyIntProp{
get { return value; }
set { MyIntProp=value; }
}如果,希望可以对值进行测试就需要加判定语句如:
set{
if(value>=0 && value<=10){ myInt=value; }
else{throw(new ArrgumentOutOfRangeException("MyIntProp",value,"MyIntProp must be assingned a value between 0 and 10"}//此处加了一个抛出一个错误的语句。
}
接口:先来看下如何定义接口
interface IMyInterface{//Interface memebers}
看起来接口与类成员定义相似,但与之相比有以下区别:
不允许使用访问修饰符,因为接口是公共的.
接口成员不能包含代码体
接口不能使用关键字
类型定义成员是禁止的
如果要隐藏继承了基接口的成员,可以使用new关键字来定义它们.
例如:
interface IMyBaseInterface{
void DoSomething();
}
interface IMyDerivedInterface:IMyBaseInterface
{new void DoSomething()}
接下来是在类中实现接口:
public interface IMyInterface
{
void DoSomething();
void DoSomethingElse();
}
public class MyClass:IMyInterface
{
public void DoSomething(){}
public void DoSomethingElse(){}
}
如下示例:
建立一个class1.cs的文件,该文件代码如下:
public class MyClass
{
public readonly string Name;
private int intVal;
public int IntVal
{
get { return intVal; }
set { intVal = value; }
}
public int val
{
get
{
return intVal;
}
set
{
if (value >= 0 && value <= 0)
intVal = value;
else
throw (new ArgumentOutOfRangeException("val", value, "Val must be assigned a value between 0 an 10!"));
}
}
public override string ToString()
{
return "Name:" + Name + "/nVal:" + val;
}
private MyClass()
: this("Default Name")
{
}
public MyClass(string newName)
{
Name = newName;
intVal = 0;
}
}
再建立一个class2.cs的文件:
namespace ConsoleApplication1
{
public class MyBaseClass
{
public virtual void Dosomething()
{
Console.WriteLine("Base imp");
}
}
public class MyDerivedClass : MyBaseClass
{
new public override void Dosomething()
{
Console.WriteLine("DerivedClass imp");
}
}
}
主文件为:namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("creating object myobj..");
MyClass myobj = new MyClass("My Object");
Console.WriteLine("myobj created");
for (int i = -1; i <= 0; i++)
{
try
{
Console.WriteLine("/nAttempting to assign{0} to myobj.val..", i);
myobj.val = i;
Console.WriteLine("Value {0} assigned to myobj.val", myobj.val);
}
catch (Exception e)
{
Console.WriteLine("Exception {0} thrown.", e.GetType().FullName);
Console.WriteLine("Message:/n/"{0}/"", e.Message);
}
}
Console.WriteLine("/noutputing myobj.Tostring()...");
Console.WriteLine(myobj.ToString());
Console.WriteLine("myobj.Tostring() output.");
MyBaseClass myobj2 = new MyBaseClass();
myobj2.Dosomething();
Console.ReadKey();
}
}
}