.NET基础知识问题汇总(持续更新中)

C#.NET开发中常用的技术问题汇总(持续更新) C#.NET开发中常用的技术问题汇总 001.判断一个Form是否已关闭并释放,需要从引用和对象两方面来判断,     判断引用是否为null: mainfm == null     判断引用的对象是否已释放: mainfm.IsDisposed     MainForm mainfm;     ......     private void button_ok_Click(objec 阅读详情

1. 简述 private、 protected、 public、internal修饰符的访问权限。

private: 只能在类的内部访问,即使子类也不能够访问

protected: 可以在类的内部访问,子类也可以访问,但无法通过外部访问。

public: 可以在类或子类的内部访问,也可以通过外部访问。

internal: 只能在程序集内部访问。


2. 列举ASP.NET 页面之间传递值的几种方式,并简单描述各自的优缺点。

QueryString, Session, Application, Cookie, Transfer.

QueryString: 存放于URL中,优点是使用方便,占用服务器资源少,缺点是安全性较差(暴露在了URL中),而且只能传递值,不能传递对象;

Session: 数据存放于服务器端,是用户级的全局资源,优点是使用方便,并且可以进行对象传递, 缺点是消耗服务器资源较大,容易丢失(在数据量比较大的情况下);

Application: 应用程序级全局变量,占用服务资源少,但因为是全局变量,所以应该尽量避免用户级的更改。

Cookie: 存放于客户端,依赖客户端,在客户端禁止Cookie的情况下则无法使用,此外,Cookie存在被盗窃的风险。

Transfer: ?


3. 一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求第30位数是多少, 用递归算法实现

  public class FibonacciSequence
    {
        public static int GetValueFromIndex(int index)
        {
            if (index < 0) throw new ArgumentOutOfRangeException("Index");

            if (index == 0) return 0;

            return index == 1 ? 1 : (GetValueFromIndex(index - 1) + GetValueFromIndex(index - 2));
        }
    }

4.  C#中的委托是什么?事件是不是一种委托?

事件是一种特殊的委托,但它delegate要多了一些限制。


5. 请说出override与overload的区别,并举例说明

这个问题可能需要从3个方面来讲:重载函数,覆盖函数与普通函数。

先看下面的代码:

namespace ConsoleApplication
{
    class TestClass
    { 
        public void MethodToOverload()
        {
            Console.WriteLine(String.Format("Class: {0}, Signature: {1}", "TestClass", "void MethodToOverload()"));
        }

        public void MethodToOverload(String para)
        {
            Console.WriteLine(String.Format("Class: {0}, Signature: {1}", "TestClass", "void MethodToOverload(String para)"));
        }

        public virtual void MethodToOverride()
        {
            Console.WriteLine(String.Format("Class: {0}, Signature: {1}", "TestClass", "void MethodToOerride()"));
        }

        public void NormalMethod()
        {
            Console.WriteLine(String.Format("Class: {0}, Signature: {1}", "TestClass", "void NormalMethod()"));
        }
    }

    class TestInheritClass : TestClass
    {
        public override void MethodToOverride()
        {
            Console.WriteLine(String.Format("Class: {0}, Signature: {1}", "TestInheritClass", "void MethodToOerride()"));
        }

        public void NormalMethod()
        {
            Console.WriteLine(String.Format("Class: {0}, Signature: {1}", "TestInheritClass", "void NormalMethod()"));
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            TestClass inheritClass = new TestInheritClass();

            inheritClass.MethodToOverride();

            inheritClass.NormalMethod();

            ((TestInheritClass)inheritClass).NormalMethod();

            inheritClass.MethodToOverload();

            inheritClass.MethodToOverload("para");
        }
    }
}
运行结果如下:

Class: TestInheritClass, Signature: void MethodToOerride()
Class: TestClass, Signature: void NormalMethod()
Class: TestInheritClass, Signature: void NormalMethod()
Class: TestClass, Signature: void MethodToOverload()
Class: TestClass, Signature: void MethodToOverload(String para)

第一个是被override的函数,我已经将继承类转换成了基类,但是,被override的函数依然调用的是继承类的成员函数,这是覆盖函数的特性。其关键是两个单词:virtual和override;所以,virtual函数是可以被派生类覆盖的(abstract也可以)。

第二个是普通的函数,我在派生类中又进行了重新定义,由于我已经将派生类的实例转换成了基类,所以,调用时,显示出来的是基类的特性。再将它转换成派生类,调用时有调用了派生类的函数,显然,这里没有看到覆盖这一特性。

第三个是重载函数,与覆盖函数不同的是,重载函数的依据是函数签名(除返回值),对于相同的函数名,根据参数的类型或数量来决定调用哪个函数。


6. 描述一下C#中索引器的实现过程,是否只能根据数字进行索引?

索引可以使用对象,详见示例代码:

namespace ConsoleApplication
{
    public class IndexClass
    {
        public string this[int index]
        {
            get{
                return String.Format("{0}th element", index);
            }
        }

        public string this[string key]
        {
            get
            {
                return String.Format("element with key = {0}", key);
            }
        }
    }
}

7.请指出下面代码中可能出现的编译错误

namespace PlayAround
{
    class Program
    {
        static void Main(string[] args)
        {
            int ival = 1024;

            {
                double ival = 3.14; // error 1
                string str = "hello";
            }

            {
                double str = 3.1415926;
            }

            string str = "world"; // error 2
        }
    }
}

两个编译错误的原因都是因为本地区块的声明与顶层的声明冲突,与声明的先后顺序无关。


8.下列选项中,哪些选项会导致编译失败

namespace PlayAround
{
    internal class SampleClass
    {
    }


    class Program
    {
        public const SampleClass objA = new SampleClass(); // option A
        public const int iB = 0; // option B
        public readonly SampleClass objC = new SampleClass(); // option C
        public static SampleClass objD = new SampleClass(); // option D
        public const SampleClass objE = null; // option E


        static void Main(string[] args)
        {


        }
    }
}

经测试发现,只有option A会导致编译失败,因为const在编译期间值就需要确定了,而new操作需要在堆上申请内存,两者存在时间上的冲突,注定无法共存。


9.下列程序会输出什么结果,并分析原因。

namespace ConsoleApplication
{
    class Program
    {
        static IEnumerable<int> WithNoYield()
        {
            IList<int> list = new List<int>();

            for (int i = 0; i < 5; i++)
            {
                Console.WriteLine(i.ToString());

                if (i > 2) list.Add(i);
            }

            return list;
        }


        static IEnumerable<int> WithYield()
        {
            for (int i = 0; i < 5; i++)
            {
                Console.WriteLine(String.Format("Yield: {0}", i));

                if (i > 2) yield return i;
            }
        }

        static void Print(IEnumerable<int> list)
        {
            foreach (int i in list)
            {
                Console.WriteLine(i.ToString());
            }
        }

        static void Main(string[] args)
        {
            var list1 = WithNoYield();

            var list2 = WithYield();

            Console.WriteLine("list1: ");
            Print(list1);
            Console.WriteLine("list2: ");
            Print(list2);
        }
    }

输出结果:

0
1
2
3
4
list1:
3
4
list2:
Yield: 0
Yield: 1
Yield: 2
Yield: 3
3
Yield: 4
4

从结果中,可以发现,yield的计算并不是在返回时执行,而是在进行遍历的时候执行,这是一种延迟计算的概念。

VB.NET书籍整理,持续更新! VB.NET书籍整理,包含VB.NET书籍,ASP.NET书籍,ADO.NET书籍 Email-zhangchaochn@qq.com 欢迎技术交流. 阅读详情

相关推荐

MAX30102传感器实战:从寄存器配置到Arduino心率血氧监测

本文详细介绍了MAX30102传感器在Arduino平台上的实战应用,从寄存器配置到心率血氧监测的全过程。通过清晰的代码示例和实用技巧,帮助开发者快速实现脉搏血氧仪功能,包括I2C通信、FIFO数据处理及算法实现,适用于健康监测和可穿戴设备开发。

weixin_29182481的博客 511

C#、.NET面试基础知识点与项目难点问题

答案:可以使用System.IO命名空间中的文件操作类(如File和Directory)来实现文件的读写和删除等操作,以及路径解析和过滤器等功能来提高文件操作的灵活性。答案:可以使用Git或SVN等版本控制系统来进行代码的版本管理和协作开发,以及持续集成和部署工具(如Jenkins或TeamCity)来实现自动化构建和部署。同时,还需要对异常进行日志记录和通知。答案:可以使用日志库(如log4net或NLog)来实现日志的记录和管理,以及日志级别和格式化等功能来满足不同的日志需求。

m0_65664914的博客 1133

在虚拟机上搭建FTP服务器

chroot_list_file=/etc/vsftpd/chroot_list # 对chroot_list下用户限制。[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf #打开配置文件。# 指定用户的shell: -s /usr/bin/nologin。# 在配置文件中找到以下几行代码, 去掉注释(去掉 "#"号)# 指定用户主目录:/data/ftp/ftpuser -M。(2)修改配置文件,路径/etc/vsftpd/ 下的文件。

weixin_70753380的博客 3209

.net基础问题

1, 请你说说.NET中类和结构的区别?   答:结构和类具有大体的语法,但是结构受到的限制比类要多。类的关键字是class,而结构的关键字是struct,结构不能申明有默认的构造函数,为结构的副本是又编译器创建和销毁的,所以不需要默认的构造函数和析构函数。结构是值类型,所以对结构变量所做的改变不会影响其的原值,而类是引用类型,改变其变量的值会改变其原值。向方法传递结构是时是通过值传递的,而不是

Dream_shine的专栏 1003

反激变压器设计学习笔记

反激变压器匝比感量设计

m0_55419117的博客 5262

从零到一:Qt与PCL的跨平台开发环境搭建全攻略

本文详细介绍了从零开始搭建Qt与PCL跨平台开发环境的完整流程,涵盖Windows、Linux和macOS三大平台。重点解析了Qt5与Qt6版本选择、PCL库安装配置、VTK集成等关键技术要点,并提供跨平台CMake项目模板和常见问题解决方案,助力开发者快速构建三维点云处理应用。

weixin_29280657的博客 383

.NET常见面试题汇总

首先,汇总一共分为三部分:一是关于.NET技术的面试问题,二是关于.NET项目中的实际问题,三是历年出现过一些面试题汇总。

m0_65664914的博客 3844

【通信协议-RTCM】MSM语句(1) - 多信号GNSS观测数据消息格式

注释:RTCM响应消息1020为GLONASS星历信息,暂不介绍,前公司暂未研发RTCM消息类型版本的DR/RTK模块,DR/RTK模块仅NMEA消息类型使用注释:公司使用的多信号语句类型为MSM4&MSM7,也应该是运用最广泛的语句类型,例如本人之前在公司开发的工具全是基于MSM7语句类型来进行的。

qxj2422640226的博客 2092

总结的一些.NET基础笔试题

接口中的所有方法都是抽象的,没有一个有程序体。声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。21、try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?wait()是线程交互时,如果线程对一个同步对象x 发出一个wait()调用,该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到。

u010440444的专栏 614

ORB-SLAM3在windows11下的编译使用

近期在学习SLAM,想部署一下ORB-SLAM3,但是自己电脑是win11系统,因此就想着在win11上部署一下。但是网上看了一些教程,有一些博客,但是可能不适合我这种情况把,就很纠结。先说下结果,配置成功,过程极其痛苦。

weixin_44457768的博客 6096

ESD镜像解密与转换全攻略:从esd-decrypter到WinNTSetup的完整流程

本文详细解析了ESD镜像的加密特性与压缩优势,并提供了从解密到转换的完整实战指南。核心步骤包括使用esd-decrypter工具解密ESD文件为WIM格式,以及如何结合WinNTSetup进行灵活的系统安装或进一步封装为可引导的ISO镜像,帮助用户高效处理官方Windows安装镜像。

weixin_29207439的博客 451

.net基础问题与答案一

1、String与StringBuilder的区别   String类存在一个问题:重复修改给定的字符串,效率会很低,string类型实际上是一个不可变的数据类型,一旦对字符串对象进行了初始化,该对象的字符串对象就不能改变了。表面上修改字符串内容的方法和运算符重载实际上创建一个新的字符串,根据需要,可以把旧的字符串的内容复制到新的字符串中。例如,下面的代码:stringgreetingText...

weixin_33939380的博客 147

【Unity的HDRP渲染管线下用Steam VR串流结合使用遇到的各种问题_SteamVR 插件和Pico串流助手】

当你启用"Mock Runtime"选项后,Unity将模拟一个虚拟的OpenXR运行时环境,并提供一些虚拟的设备和功能,让你能够进行开发和调试。在Unity中,SteamVR插件是一个由Valve提供的Unity插件,它允许开发者在Unity项目中集成SteamVR功能,以便支持SteamVR设备。OpenXR是一个跨平台的虚拟和增强现实(VR/AR)开发接口,它为开发者提供了一个统一的接口,用于访问不同VR/AR硬件设备和平台的功能。这个选项是用于模拟OpenXR运行时环境的功能。

暴走约伯的博客 2800

VB.net开发积累——开发中常见问题的汇总和集锦,持续更新中

VB.net开发积累——开发中常见问题的汇总和集锦,持续更新中

Arya的博客,专注后端领域 1238

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

中国.NET:各地微软技术俱乐部汇总(持续更新中...)

中国.NET:各地微软技术俱乐部汇总(持续更新中...) 本文是转载文,源地址: https://www.cnblogs.com/panchun/p/JLBList.html by 史记微软. 成功的故事荡气回肠,失败的故事千回百转,但是你不去追求与偿试,你永完不会知道成功的原因失败的原因是什么,人生一辈子也就三万天,如果每天糊里糊涂的过去了,若干年后要连故事都没得讲。如果你还是孤...

极客学长Bravo | 突破信息差 | 副业生财有术 9306

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

关于ASP.NET MVC开发设计中出现的问题与解决方案汇总 【持续更新】

关于ASP.NET MVC开发设计中出现的问题与解决方案汇总 【持续更新】

Littleree的博客 184

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

目标跟踪模板生成原理:从create_template.py看数据预处理与模板更新

视觉目标跟踪是计算机视觉的核心任务之一,而模板图像的质量直接影响跟踪模型的稳定性。在跟踪任务中,初始帧的目标区域需要经过裁剪、上下文扩展、尺寸归一化等步骤,生成固定大小的模板,作为后续帧匹配的参照基准。这一过程看似简单,却涉及标注格式统一、中心点坐标转换、边界约束与多尺度适配等关键技术细节。模板生成的质量不仅决定了特征提取器的输入分布是否一致,也关系到模板更新机制能否有效应对目标形变与遮挡。在工程实践中,规范化数据预处理流程、统一训练与推理阶段的模板生成逻辑,是保障跟踪算法可复用的基础。本文从视觉目标跟踪的

weixin_33824363的博客 1378

.NET高频技术点(持续更新中)

NET 框架的发展历程.NET Core 与 .NET Framework 的区别.NET 5 及后续版本的统一平台装箱:装箱操作时将值类型隐式地转换成引用类型。装箱一个数值会为其分配一个对象实例,并把该数值复制到新对象中。拆箱:拆箱操作是指显式地把引用类型转换成值类型int i=123;object o=i;//装箱int j=(int)o//拆箱Int32—>Object 装箱 object o=i;//装箱。

qq_41757790的博客 1311

.NET资源站点汇总[持续更新中]

 名称:快速入门地址:http://chs.gotdotnet.com/quickstart/描述:本站点是微软.NET技术的快速入门网站,我们不必再安装.NET Framework中的快速入门示例程序,直接在网上查看此示例即看。****************************************************名称:微软官方.NET指导站点地址:http://www.go

971

asp.net学习资源汇总 ( 持续更新 )

名称:快速入门地址:http://chs.gotdotnet.com/quickstart/描述:本站点是微软.NET技术的快速入门网站,我们不必再安装.NET Framework中的快速入门示例程序,直接在网上查看此示例即看。****************************************************名称:ASP.NET地址:http://www.asp.net描述:

asp.net学习社区 1255

.net 报错汇总——持续更新

1.未能找到 CodeDom 提供程序类型“Microsoft.CodeDom.Providers.DotNetCompilerPla PM> Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform 2.数据库乱码 连接字符串中添加charset=utf8 3.Voi...

weixin_30462049的博客 503

VersionEye开源持续更新工具

VersionEye开源了帮助更新项目依赖项的同名持续集成工具。该工具提出了“持续更新(continuous updating)”的概念,它可以提供许多软件库的更新通知、许可检查和安全漏洞信息。VersionEye创建者Robert Reiz希望通过开源这款软件增加人们的信任和这个访问私人库的代码库的透明度。\\该工具集成了GitHub、Bitbucket和Stash,可以在使用Java、Ruby...

weixin_34023863的博客 94

Admin.NET管理系统(vue3等前后端分离)学习笔记--持续更新

这篇学习笔记主要分享了前端开发中的实用技巧和问题解决方案,内容涵盖环境配置、路由模式、打包优化、IIS部署等多个方面。重点包括.env环境变量设置、Vue路由模式选择(hash模式与history模式的差异)、内存溢出问题处理、IIS部署配置(web.config重写规则)、代码生成器使用等。笔记还提供了多个实用参考链接,如Element Plus组件库、Vue Next Admin框架文档、Furion框架等,并附有详细的问题截图和解决步骤,适合前端开发者查阅参考。

无线智能模块 可视DIY智能专家 1万+

Jenkins持续集成学习-搭建jenkins问题汇总

目录 Jenkins持续集成学习5-搭建jenkins问题汇总 目录 前言 问题列表 nuget还原包问题 编译问题 SVN更新问题 参考文档 Jenkins持续集成学...

weixin_34001430的博客 1187

【Electron Playground】Electron 窗口问题汇总

此文转载自:https://my.oschina.net/u/4876846/blog/4809393 LiteOS Studio图形化调测能力,物联网打工人必备!>>> 作者:Kurosaki 本节旨在汇总在开发Electron 窗口可能遇到的问题,做一个汇总,后续遇到问题会持续更新。 1. 窗口闪烁问题。 const { BrowserWindow } ...

Python研究所 1349
上一篇: ASP.NET MVC 仿真 - (3)从Assemblies中找出所有的Controller
下一篇: ASP.NET MVC - 定制属于你自己的ViewEngine
jackvs
博客等级 码龄18年 7粉丝 30原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值