封装
public private和protected跟c++一样,internal表示同一个程序集的对象可以访问;
protected internal表示当前程序集、本类和派生类中可以访问。
比如成员变量声明为:
using System; // namespace declaration. 可能不止一个
namespace csharptest // namespace
{
class HelloWorldApplication // 与 Java 不同的是,文件名可以不同于类的名称。
{
class Rectangle
{
internal double length;
internal double width;
public void Acceptdetails()
{
length = 4.5;
width = 3.5;
}
public double GetArea()
{
return length * width;
}
public void Display()
{
Console.WriteLine("Length: {0}", length);
Console.WriteLine("Width: {0}", width);
Console.WriteLine("Area: {0}", GetArea());
}
}
// 在与本类相同的类中
static void Demo() { // 方法名需要首字母大写,声明成static吧
Rectangle r = new Rectangle();
r.Acceptdetails();
Console.WriteLine(r.length*r.width);
}
static void Main(String[] args) // 所有c#程序的入口点
{
HelloWorldApplication.Demo(); // 调用static要带类名的
Console.ReadKey(); // 针对VS.NET用户,指等待一个按键输入,避免闪退
}
}
}
析构函数
~类名()
不能继承或重载,用于在结束程序前释放资源。
静态成员
static修饰,如何初始化?(待补充。。。)
静态函数
public static int getNum() 只能访问静态变量
如果是public static,那么只用类名.静态方法名即可调用了,不用实例化。
继承
<访问修饰符符> class <基类>
{
...
}
class <派生类> : <基类>
{
...
}
c#不支持多重继承,但是可以用接口来实现多重继承。
静态多态性:函数重载、运算符重载
动态多态性:抽象类;虚方法
运算符重载
例如Box类中重载+
public static Box operator+ (Box b, Box c)
抽象类
不能创建实例,抽象方法要放在抽象类里,类名前放sealed表示密封类,此时不能被继承了,所以抽象类也不能声明为sealed。
虚方法是要在继承类中实现的方法,加virtual关键字。它的调用是运行时发生的。
就是说,不同的子类中可以override不同方案,调用时根据对象调用。
接口
命名以I开头,public的。
interface IMyInterface
{
void MethodToImplement();
}
继承跟类一样,接口也可以继承其他接口。
class InterfaceImplementer : IMyInterface {}