提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
一、C#中类的属性和字段
- 字段演示
private string name;
- 属性演示
int Value
{
set
{
name = value;
}
get
{
return value;
}
}
- 属性的一些特征以及和字段的区别
- 属性
- 它是命名的类成员
- 有类型
- 可以被赋值和读取
- 不同
- 它不一定为数据存储分配内存
- 属性是一个函数成员
- 可以执行代码
- 属性
属性是一组两个匹配的,命名的,称为访问器的方法,其中,set访问器为属性赋值,get访问器从属性获取值
二、静态构造函数
构造函数也可以声明为static
。实例构造函数初始化类的每个新实例,而static
构造函数初始化类级别的项。通常静态字段初始化类的静态字段
- 初始化类级别的项
- 在引用任何静态成员之前
- 在创建类的任何实例之前
- 静态构造函数在以下方面与实例构造函数类似
- 静态构造函数的名称必须和类名相同
- 构造函数不能返回值
- 静态构造函数在以下方法和实例构造函数不同
- 静态构造函数声明中使用
static
关键字 - 类只能有一个静态构造函数,而且不能带参数
- 静态构造函数不能有访问修饰符
- 静态构造函数声明中使用
示例
class MyClass
{
private static Random key;
staic MyClass()
{
key = new Random();
}
}
三,虚方法和覆写方法
1,虚方法
我们知道,当使用父类也就是基类引用访问子类也就是派生类对象时,得到的是基类的成员,那么有没有可能可以访问到派生类中呢?
在C#中是这么实现的,它叫虚方法,满足以下条件就可以可以访问到派生类的成员了
- 派生类的方法喝基类的方法有相同的签名和返回类型
- 基类的方法使用
virtual
标注 - 派生类的方法使用
override
标注
有了解Java一眼就看出来了,是重写,对的,没错,大概情况是一样的,但是一个语言一个习惯
class BaseClass
{
virtual public void Print()
{
Console.WriteLine("This is the base class");
}
}
class DeruvedClass : BaseClass
{
override public void Print()
{
Console.WriteLine("This is the derived class");
}
}
class Program
{
static void main()
{
DeruvedClass derived = new DeruvedClass();
BaseClass base = (BaseClass) derived;
derived.Print();
base.Print();
}
}
还有一些需要注意的关于vritual
和override
修饰符的重要信息有
- 覆写和被覆写的方法必须由相同的可访问性。
- 不能覆写
static
方法或非虚方法 - 方法,属性和索引器以及另一种成员类型事件都可以被声明为
virtual
和override
2,覆写
覆写方法可以在继承的任何层次出现
当我们使用对象基类部分的引用去调用一个被覆写的方法时,方法的调用被沿派生类,也就是子类层次上溯执行,一直到标记位override
的方法的最高派生类版本中
但是如果后面还有派生类里有该方法的其他声明,但是没有标记为override
,那么它们不会被调用
class MyBaseClass
{
virtual public void Print()
{
Console.WriteLine("This is the base class");
}
}
class MyDerivedClass: MyBaseClass
{
override public void Print()
{
Console.WriteLine("This is the derived class");
}
}
class SeondDerived: MyBaseClass
{
override public void Print()
{
Console.WriteLine("This is the second derived class");
}
}
class Program
{
static void Main()
{
SeondDerived derived = new SeondDerived();
MyBaseClass base = (MyBaseClass) derived;
derived.Print();
base.Print();
}
}