1.静态类
静态类不能实例化。
静态类是密封的(sealed)不能从它派生(derive)类型。
静态类不能包含非静态成员也不能有构造方法。
C#中没有全局方法,我们可以用静态类储存一些想用的数据。
static class Sclass
{
一些我们需要的静态数据
static A()
{
……
}
}
在主函数中,我门可以这样使用
Sclass.A();
2.析构函数
如果对象要控制非托管(unmanaged)的资源,用完后要显式地(explicitly)释放托管的资源,这时需要析构方法。
如果只有托管(managed)引用,就不需要实现析构方法(destructor)。
与c++中一样,本身存在一个默认的,在使用完后帮你删除类。如果自己想在删除的同时进行一些其他操作,我们可以重写析构函数。
~className()
{
………
}
下图为我在用继承时使用了析构函数。
代码为
namespace ConsoleApplication2
{
class Program
{
public class myClassA
{
int shuju;
public myClassA()
{
shuju = 0;
Console.WriteLine("调用构造函数A");
}
~myClassA()
{
Console.WriteLine("调用析构函数A");
}
}
public class myClassB :myClassA
{
int shuju;
public myClassB(int q)
{
shuju = q;
Console.WriteLine("调用构造函数B");
}
~myClassB()
{
Console.WriteLine("调用析构函数B");
}
}
static void Main(string[] args)
{
myClassB b = new myClassB(5);
}
}
}
结果为
同时了解到继承时自上而下,析构时自下而上。
3.参数传递
传递参数时,与c++类似,有值传递和引用传递。传递时什么都不加,为值传递,实际的数据并未改变。引用传递与c++不同,参数前加ref,out.其中out不用初始化数据。
public void GetTime(int h, ref int m, out int s )
{
h = 12;
m = 34;
s = 56;
}
…h1=0;m1=0;
GetTime(h1, ref m1, out s1 );
… h1=0;m1=34;s1=56;
4.封装
用以下代码尝试
class Program
{
public class myClass
{
private int myProperty ;
public myClass(int q)
{
myProperty = q;
}
public int MYPROPERTY
{
get { return this.myProperty; }
set { this.myProperty = value; }
}
}
static void Main(string[] args)
{
myClass a=new myClass(1);
Console.WriteLine(a.MYPROPERTY);
a.MYPROPERTY = 8;
Console.WriteLine(a.MYPROPERTY);
Console.Read();
}
}
结果 1
8
可以看出,封装成功。成功的用poperty调用修改private类型的数据。
5.继承和多态
与c++中有区别,首先是在子类重写函数时要在函数名前加 override.
另外,c#中有new的问题。
存在new时,如果所用实例是new对应类的类型,则调用该类父类的相关函数。
对于override,所用实例属于什么类,就调用所在类的相关函数。