全部都是类
在C#中,所有的代码都会包含在一个类当中,而程序的执行入口会在一个唯一的main方法当中。而类中的方法也会存在着不同,比如public,private等。
为了保护数据,一般来说我们不将一个类中的元素设置为public,以防被随意的更改,但是如果设置为private的话,程序的执行又会存在诸多不便。所以,C#提供一种方便的功能,属性,我们将一个属性赋予一个变量,就可以通过这个属性来存取这个变量了。这样做的好处就是我们不需要担心数据被随意的访问并且可以设置一个变量的存取权限。
子类继承
子类继承的方法十分简单,我们可以按照如下的形式:
public class Student : People
{
//code, function or variables
}
上面的代码就表示了Student是People的一个子类,可以从子类当中继承诸多的变量和方法。并且可以重写继承而来的方法。
当然,有些类是不能够被继承的,这个概念就有点像java中的final类,而在C#当中,这个关键字是seal.
Abstract Class
有的时候,存在有很多的类有相似的属性,我们可以在一个类当中规定要实现的代码,而这样的类则被称为Abstract Class,如下:
public abstract class Student
{
public virtual void func1(){}
public abstract void func2();
}
如果方法被virtual修饰,则被实现,在这个类被继承的时候可以被重写,而被abstract修饰的话在这里不能实现这个方法,而在继承的子类当中必须实现这个内容。
接口
接口就是有点像abstract class的一个概念,规定了实现该接口的类必须要实现的方法。我们可以定义一些属性,方法和事件,每一个实现了这个接口的类都必须实现这些功能。
比如下面这个接口:
// Defining an Interface
public interface ILoyaltyCardHolder
{
int TotalPoints { get; }
int AddPoints(decimal transactionValue);
void ResetPoints();
}
实现这个接口的一个类:
// Implementing an Interface
public class Customer : ILoyaltyCardHolder
{
private int totalPoints;
public int TotalPoints
{
get { return totalPoints; }
}
public int AddPoints(decimal transactionValue)
{
int points = Decimal.ToInt32(transactionValue);
totalPoints += points;
}
public void ResetPoints()
{
totalPoints = 0;
}
// Other members of the Customer class.
}