C# 子类实例化基类 基类使用不了子类的方法_C#高级编程面试考题

一、简答题

1.简述C#中的所有访问修饰符及访问权限

private(私有的)

给类,及所有类成员使用

所有类成员的默认访问修饰符

可访问范围

当前类自身

public(公开的)

给类,及所有类成员使用

可访问范围

当前类自身

所有的子类

同一程序集其他类通过实例化也可以访问

其他程序集中的类也可以实例化访问

protected(受保护的)

类,内嵌类的所有成员

类的默认访问修饰符

可访问范围

当前类自身

所有的子类可以访问

同一程序集其他类不可以访问

其他程序集中可以通过继承也可以访问

internal

类,内嵌类的所有成员

可访问范围

当前类自身

同一程序集的其他类可以通过实例化访问

同一程序集中的子类也可以访问

其他程序集中不管是不是子类都无法访问

internal protected

类,及内嵌类的所有成员

可访问范围

当前类自身

同一程序集的其他类可以通过实例化进行访问

所有子类可以访问

其他程序集中可以通过继承进行访问,但实例化不行

2.简单介绍方法的重载和重写

重写:当一个子类继承一父类,而子类中的方法与父类中的方法的名称,参数个数、类型都完全一致时,就称子类中的这个方法重写了父类中的方法。

重载:一个类中的方法与另一个方法同名,但是参数表不同,这种方法称之为重载方法。

3.方法中的ref参数和out、参数的用法是什么

①、ref的使用:使用ref进行参数的传递时,该参数在创建时,必须设置其初始值,且ref侧重于修改;

②、out的使用:采用out参数传递时,该参数在创建时,可以不设置初始值,但是在方法中必须初始化,out侧重于输出;

ref是有进有出,而out是只出不进。

4.简单介绍数组和集合的区别

①、数组声明了元素的类型,集合不声明

②、数组是静态的,有固定大小,创建了就无法改变容量,而集合是动态扩展容量,可以根据需要改变大小.

③、数组存放类型只能是一种,集合可以不是一种

5.简单介绍C#类中的两个特殊函数

构造函数

构造函数又叫构造方法,它是一种特殊的成员函数,它主要用于为对象分配存储空间,对数据成员进行初始化(对类进行初始化)。

如果类中没有声明构造函数,那么系统会自动生成一个构造函数,如果声明了构造函数,那么系统将不会再理会,构造函数可以重载

析构函数

析构函数是实现销毁一个类的实例的方法成员。析构函数不能有参数,当类生成的对象被释放时自动生成的函数

6.简单介绍static静态的用法、特性

用法:

①、Static可以修饰类,使类成为静态类。这样在此类中只能定义静态的方法和静态的变量。

②、static可以修饰变量,这个变量只能是成员变量,不能是局部的。

既不能修饰方法体中的变量,以及形式参数。

③、static可以修饰方法,Main方法必须用static修饰,因为它是与程序共存亡的,是程序的入口和结束的大门。

特性:

①、只会在编译时分配空间,程序真正执行时,是不会重新分配空间的.

②、值能变,但是其指向地址不会变

③、用static声明了的变量不会被GC(辣鸡回收机制)所回收. 所以使用时需要注意.

7.C#中的委托是什么?事件是不是委托?

委托是一种在对象里保存方法引用的类型,同时也是一种类型安全的函数指针。把一个方法作为参数带入另一个方法

事件是一种特殊的委托。

8.C#中类(class)与结构(struct)的异同

①、值类型与引用类型

结构Struct是值类型:值类型在堆栈上分配地址,所有的基类型都是结构类型,例如:int 对应System.int32 结构,string 对应 system.string 结构 ,通过使用结构可以创建更多的值类型。

类Class是引用类型:引用类型在堆上分配地址。

结构是值类型所以结构之间的赋值可以创建新的结构,而类是引用类型,类之间的赋值只是复制引用。

②、继承性

结构:不能从另外一个结构或者类继承,本身也不能被继承,虽然结构没有明确的用sealed声明,可是结构是隐式的sealed .

类:完全可扩展的,除非显示的声明sealed 否则类可以继承其他类和接口,自身也能被继承

③、内部结构:

结构:

没有默认的构造函数,但是可以添加构造函数

没有析构函数

没有 abstract 和 sealed(因为不能继承)

不能有protected 修饰符

可以不使用new 初始化

类:

有默认的构造函数

有析构函数

可以使用 abstract 和 sealed

有protected 修饰符

必须使用new 初始化

同:

①、虽然结构与类的类型不一样,可是他们的基类型都是对象(object),c#中所有类型的基类型都是object

②、虽然结构的初始化也使用了New 操作符可是结构对象依然分配在堆栈上而不是堆上,

9.介绍C#的String和StringBuilder的用法

string是个基础类型,每次赋值都会重新分配内存空间,string是对System.String命名空间起的一个名字。String类有不可改变性,每次执行字符操作时,都会创建一个新的String对象。

StringBuilder:使用前先进行实例化,支持空参数构造,在对象实例化后就不再重新分配内存。StringBuilder是由Char数组构成的。构建新的StringBuilder时能设置容量大小,当添加字符串,超过已分配的数组大小时,就会创建一个新的数组,此时容量会翻倍,旧空间自动销毁。

10.抽象和虚拟的区别 【virtual(虚拟函数)、abstract(抽象函数)】

①、virtual修饰的方法必须有实现,而abstract修饰的方法一定不能实现。

②、virtual可以被子类重写,而abstract必须被子类重写。

③、如果类成员被abstract修饰,则该类前必须添加abstract,因为只有抽象类才可以有抽象方法。

④、无法创建abstract类的实例,只能被继承无法实例化,比如: BaseTest2 base2 = new BaseTest2();将出现编译错误:抽象类或接口不能创建实例。

⑤、C#中如果要在子类中重写方法,必须在父类方法前加virtual,在子类方法前添加override,这样就避免了程序员在子类中不小心重写了父类方法。

⑥、abstract方法必须重写,virtual方法必须有实现

11.C#中的接口和类有什么异同?

不同点:

不能直接实例化接口。

接口不包含方法的实现。

接口可以多继承,类只能单继承。

类定义可以在不同的源文件之间进行拆分。

相同点:

接口、类和结构都可以从多个接口继承。

接口类似于抽象基类:继承接口的任何非抽象类型都必须实现接口的所有成员。

接口和类都可以包含事件、索引器、属性。

12.进程和线程的区别是什么?

①、线程作为调度和分配的基本单位,进程作为拥有资源的基本单位

②、不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行

③、进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源.

④、在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销。

13.请详述C#中的继承问题

①、子承父业:

子类会继承父类的属性,构造,行为

②、父亲具有的,儿子不一定具有,子类具有的,父类也不一定具有

当父类只有带参构造,子类自动会要有带参构造

③、C#不支持多重继承,但是可以多重接口继承

④、关键字this:当前类自己,base:代表当前类的亲父类

⑤、实例化过程(对象创建过程,先调用的最终父类的构造函数然后依次往下调用当前类)

⑥、析构过程(对象销毁的过程,从自己开始销毁直到最终父类)

14.简单介绍break,continue,return的区别

return:跳出当前循环,直到代码块结束

break:只跳出当前循环,执行代码之后的代码

continue:只跳出当前本次循环,执行下一次循环

15.简单描述Socket通信TCP协议的三次握手的作用

三次握手的目的在于验证服务器浏览器之间两者的收,发功能是否正常。

①、保证客户端能够具有发送数据的能力

②、保证服务端能接收到数据,保证服务端能够发送数据的能力

③、保证客户端能够接收到数据

16.按照步骤叙述建立Socket通信的服务端,客户端的步骤

服务器端:

第一步:创建一个用于监听连接的Socket对像;

第二步:用指定的端口号和服务器的ip建立一个EndPoint对像;

第三步:用socket对像的Bind()方法绑定EndPoint;

第四步:用socket对像的Listen()方法开始监听;

第五步:接收到客户端的连接,用socket对像的Accept()方法创建一个新的用于和客户端进行通信的socket对像;

第六步:通信结束后一定记得关闭socket;

客户端:

第一步:建立一个Socket对像;

第二步:用指定的端口号和服务器的ip建立一个EndPoint对像;

第三步:用socket对像的Connect()方法以上面建立的EndPoint对像做为参数,向服务器发出连接请求;

第四步:如果连接成功,就用socket对像的Send()方法向服务器发送信息;

第五步:用socket对像的Receive()方法接受服务器发来的信息 ;

第六步:通信结束后一定记得关闭socket;

二、算法

1.使用递归算法计算斐波那契数列

1e91c6b3d33094ec23c500520eb4339f.png

2.在1-20这20个数中求出7个不重复的随机数

ebd0a5b7d7e3b5b74232261589361523.png

————————————————

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/397078.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

协程(Coroutine)与多线程,多进程

执行多个任务可以使用多线程或多进程。 多进程中,同一个变量,各自有一份拷贝存在于每个进程中,互不影响 多线程中,所有变量都由所有线程共享。而线程间的切换是系统进行调度,无法控制,所以可能 一个进程中的…

关于img 403 forbidden的一些思考

网页中经常需要显示图片给用户看,对网站本身来说有的图片是从本地图片服务器来的,但是一旦数量多了以后,磁盘空间又是一个问题。 所以有时就希望显示其他网站的Image,直接把其他网站的图片显示在我的网站上。但并不是所有的外网Im…

Leetcode: Kth Largest Element in an Array

Find the kth largest element in an unsorted array. Note that it is the kth largest element in the sorted order, not the kth distinct element.For example, Given [3,2,1,5,6,4] and k 2, return 5.Note: You may assume k is always valid, 1 ≤ k ≤ arrays lengt…

python 循环赋值_Python打牢基础,从19个语法开始!

Python简单易学,但又博大精深。许多人号称精通Python,却不会写Pythonic的代码,对很多常用包的使用也并不熟悉。学海无涯,我们先来了解一些Python中最基本的内容。Python的特点解释型语言,无需编译即可运行提供了交互式…

uwp连接mysql数据库_在 UWP 应用中使用 SQLite 数据库

在 UWP 应用中使用 SQLite 数据库Use a SQLite database in a UWP app06/26/2020本文内容可以使用 SQLite 在用户设备上的轻量级数据库中存储和检索数据。You can use SQLite to store and retrieve data in a light-weight database on the users device. 本指南演示如何执行该…

12-事件委托(事件代理)

什么是事件委托 通俗的讲,事件就是onclick,onmouseover,onmouseout,等就是事件,委托呢,就是让别人来做,这个事件本来是加在某些元素上的,然而你却加到别人身上来做,完成这…

oracle 窗口函数 (keep)

看到很多人对于keep不理解,这里解释一下!Returns the row ranked first using DENSE_RANK2种取值:DENSE_RANK FIRSTDENSE_RANK LAST在keep (DENSE_RANK first ORDER BY sl) 结果集中再取max、min的例子。SQL> select * from test;ID MC SL…

MySQL 的实时性能监控利器

操作系统及MySQL数据库的实时性能状态数据尤为重要,特别是在有性能抖动的时候,这些实时的性能数据可以快速帮助你定位系统或MySQL数据库的性能瓶颈,就像你在Linux系统上使用「top,sar,iostat」等命令工具一样&#xff…

设置linearlayout最大高度_技术案例 | 排烟口个数与挡烟垂壁高度的关系探讨

随着《建筑防烟排烟系统技术标准》( 以下简称新规范) 的正式实施,新规范对排烟系统的设计提出了完全不同的设计理念。根据新规范正文: 当建筑空间净高不大于6m时,每个防烟分区的排烟量应按不小于60m/(h㎡)计算且不小于15,000m/h( 走道不小于13,000m/h) &…

python安装requests第三方模块

2018-08-28 22:04:51 1 .下载到桌面后解压,放到python的目录下 --------------------------------------------------------------------------------------------------------------------------------------------------------- 2 . 在CMD输入以下 F:\>cd /d F…

mysql整站源码安装_MySQL入门01-MySQL源码安装

操作系统:CentOS 6.7MySQL版本:5.6.301.前期准备首先需要CMake,可以yum直接安装:yum install cmake也可以官网 https://cmake.org/ 下载源码编译。我这里选择了官网下载最新版本cmake-3.5.2.tar.gz。# tar -zxvf cmake-3.5.2.tar.…

集算器协助Java处理结构化文本之条件过滤

直接用Java实现文本文件中数据按条件过滤会有如下的麻烦: 1、文件不是数据库,不能用SQL访问。当过滤条件变化时需要改写代码。如果要实现象SQL那样灵活的条件过滤,则需要自己实现动态表达式解析和求值,编程工作量非常大。 2、文件太大时不能一…

python3动态加载模块的方法实现

2019独角兽企业重金招聘Python工程师标准>>> 需求 我们有时写了一个功能,需要不断地调整,但是已经在线上了,而且在执行任务, 这时要更新上去源文件,而不能结束掉当前进程,怎么办? 所以这时&…

python 浮点数最小值_PYTHON学习笔记(3)——基本数据类型

本次学习原内容均来自MOOC国家精品课程《Python程序语言设计》嵩天第一篇在问题——“今天python了吗?”中基本数据类型1、 整数(1)整数无限制 pow(x,y) 计算 (2)四种进制 2、 浮点数类型(1)取整…

2018.08.29 NOIP模拟 pmatrix(线性筛)

【问题描述】 根据哥德巴赫猜想(每个不小于 6 的偶数都可以表示为两个奇素数之和),定义 哥德巴赫矩阵 A 如下:对于正整数对(i,j),若 ij 为偶数且 i,j 均为奇素数,则 Ai,j 1, 否则 Ai,j 0。现…

Windows Azure移动终端云服务管理(公测版)

概览 云在远方,管理在您手中。在这个移动为先 云为先的世界,服务不再是基于请求才提供,而是主动来到身边方便您的模式了。我们最近将会陆续推出几大移动端利器帮助您随时随地管理您的云服务。 首批利器之中排名第一当属Azure云助手应用, 它是…

学习opencv3中文版_给视觉组新生的一点学习建议

如果说机械组是把机器人做出来电控组让机器人动起来那么视觉组就是让机器人智能化完成一个合格的机器人三者缺一不可今天就让我们来看看视觉组师兄推荐的学习建议吧!1语言基础 野狼队视觉组目前使用的主要语言是C,同时也需要具备一定的C语言基础。建议…

如何动态改变audio的播放的src

如何动态改变audio的播放的src 一、总结 一句话总结:js方式在请求外部网站的时候行,php方式在请求内外部资源都行。因为php走在js前面,所以问题可以从php方面想办法。 1、如何使用js控制修改audio的src或它的source 的src属性实现动态改变aud…

错误 open too many files

错误:服务器最大打开文件数65535启动java程序报错 open too many files解决办法:1.增加文件描述符 #服务器本来就是65535了2.排查程序 #研发总监4.研发总监和我 一起看服务器lsof -p pid(程序)|wc -l5.最终确定程序的问题6.研发总监 去改…

mysql 水平拆分实例_2021先定个小目标?搞清楚MyCat分片的两种拆分方法和分片规则!(二):水平拆分实例解析和代码实现!...

一、概述根据表中的数据的逻辑关系,将同一个表中的数据按照某种条件拆分到多台数据库(主机)上面,这种切分称之为数据的水平(横向)切分。二、案例场景在业务系统中, 有一张表(日志表), 业务系统每天都会产生大量的日志数据 , 单台服务器的数据存储及处理能…