C#基础知识之密封类可以有虚函数吗?

十多年建站经验, 网站制作、网站建设客户的见证与正确选择。成都创新互联公司提供完善的营销型网页建站明细报价表。后期开发更加便捷高效,我们致力于追求更美、更快、更规范。
可以,基类中的虚函数将隐式的转化为非虚函数,但密封类本身不能再增加新的虚函数
示例:
- class BaseClass {
 - public virtual void F(){
 - Console.WriteLine("BaseClass.F");
 - }
 - sealed class DeriveClass : BaseClass {
 - //基类中的虚函数F被隐式的转化为非虚函数
 - //密封类中不能再声明新的虚函数G
 - public virtual void G(){
 - Console.WriteLine("DeriveClass.G");
 - }
 - }
 
C#基础知识之如果基类中的虚属性只有一个属性访问器,那么继承类重写该属性后可以有几个属性访问器?如果基类中有 get 和 set 两个呢?
如果基类中的虚属性只有一个属性访问器,那么继承类重写该属性后也应只有一个。如果基类中有 get 和 set 两个属性访问器,那么继承类中可以只有一个也可以同时有两个属性访问器。
C#基础知识之abstract 可以和 virtual 一起使用吗?可以和 override 一起使用吗?
abstract 修饰符不可以和 static、virtual 和 override 修饰符一起使用
C#基础知识之接口可以包含哪些成员?
接口可以包含属性、方法、索引指示器和事件,但不能包含常量、域、操作符、构造函数和析构函数,而且也不能包含任何静态成员
C#基础知识之类和结构的区别?
类:类是引用类型在堆上分配,类的实例进行赋值只是复制了引用,都指向同一段实际对象分配的内存,类有构造和析构函数,类可以继承和被继承
结构:结构是值类型在栈上分配(虽然栈的访问速度比较堆要快,但栈的资源有限放),结构的赋值将分配产生一个新的对象。结构没有构造函数,但可以添加。结构没有析构函数,结构不可以继承自另一个结构或被继承,但和类一样可以继承自接口
示例:
根据以上比较,我们可以得出一些轻量级的对象***使用结构,但数据量大或有复杂处理逻辑对象***使用类。如:Geoemtry(GIS 里的一个概论,在 OGC 标准里有定义) ***使用类,而 Geometry 中点的成员***使用结构
- using System;
 - using System.Collections.Generic;
 - using System.Text;
 - namespace Example16 {
 - interface IPoint {
 - double X {
 - get;set;
 - }
 - double Y {
 - get;set;
 - } double Z {
 - get;set;
 - }
 - //结构也可以从接口继承struct Point: IPoint {
 - private double x, y, z;
 - //结构也可以增加构造函数
 - public Point(double X, double Y, double Z){
 - this.x = X;this.y = Y;this.z = Z;
 - }
 - public double X { get { return x;
 - }
 - set { x = value;
 - }
 - }
 - public double Y {
 - get { return x;
 - }
 - set { x = value;
 - }
 - }
 - public double Z {
 - get { return x;
 - }
 - set { x = value;
 - }
 - }
 - //在此简化了点状Geometry的设计,实际产品中还包含Project(坐标变换)
 
等复杂操作class PointGeometry {- private Point value;
 - public PointGeometry(double X, double Y, double Z){
 - value = new Point(X, Y, Z);
 - }
 - public PointGeometry(Point value){
 - //结构的赋值将分配新的内存this.value = value;
 - }
 - public double X { get { return value.X;
 - }
 - set {
 - this.value.X = value;
 - }
 - }
 - public double Y { get { return value.Y;
 - }
 - set { this.value.Y = value;
 - }
 - }
 - public double Z { get { return value.Z;
 - } set { this.value.Z = value;
 - }
 - }
 - public static PointGeometry operator +(PointGeometry Left, PointGeometry Rigth){
 - return new PointGeometry(Left.X + Rigth.X, Left.Y + Rigth.Y, Left.Z + Rigth.Z);
 - }
 - public override string ToString(){
 - return string.Format("X: {0}, Y: {1}, Z: {2}", value.X, value.Y, value.Z);
 - }
 - class Program {
 - static void Main(string[] args){
 - Point tmpPoint = new Point(1, 2, 3);
 - PointGeometry tmpPG1 = new PointGeometry(tmpPoint);
 - PointGeometry tmpPG2 = new PointGeometry(tmpPoint);
 - tmpPG2.X = 4;tmpPG2.Y = 5;tmpPG2.Z = 6;
 - //由于结构是值类型,tmpPG1 和 tmpPG2 的坐标并不一样Console.WriteLine(tmpPG1);
 - Console.WriteLine(tmpPG2);
 - //由于类是引用类型,对tmpPG1坐标修改后影响到了tmpPG3 PointGeometry tmpPG3 = tmpPG1;
 - tmpPG1.X = 7;
 - tmpPG1.Y = 8;
 - tmpPG1.Z = 9;
 - Console.WriteLine(tmpPG1);
 - Console.WriteLine(tmpPG3);
 - Console.ReadLine();
 - }
 
                分享文章:C#基础知识讨论
                
                浏览地址:http://www.csdahua.cn/qtweb/news12/303612.html
            
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网