C#第六天--C#图解教程阅读第二天

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


一、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();
	}
}

还有一些需要注意的关于vritualoverride修饰符的重要信息有

  • 覆写和被覆写的方法必须由相同的可访问性。
  • 不能覆写static方法或非虚方法
  • 方法,属性和索引器以及另一种成员类型事件都可以被声明为virtualoverride

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();
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

栀梦星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值