C#面试题

基本概念

装箱和拆箱

装箱的过程,是将 值类型 转换为 引用类型 的过程; 拆箱则是将引用类型转换为值类型。

int val = 100; 
object obj = val; //装箱
int num = (int) obj; //拆箱

委托(delegate)

委托(Delegate) 是存有对某个方法的引用的一种引用类型变量。说白了就是类似指向函数方法的指针。

事件(event)是委托吗

设计模式

单例模式(最优解)

懒汉模式——顾名思义就是懒,没有对象需要调用它的时候不去实例化,有人来向它要对象的时候再实例化对象,因为懒,比我还懒

using System;
using System.Collections.Generic;
/// <summary>
/// 适用于在多线程的情况下保证只有一个实例化对象的情况,例如银行的操作系统
/// </summary>
namespace DoubleLockInstance
{
	//----------------------------------
	// 双重锁定单例
	public sealed class Singleton
	{
		// 定义一个类对象,用于内部实现
		private static Singleton myInstance;
 
		// readonly   -   这个成员只能在“类初始化”时赋值  ,所谓的类初始化,就是直接在类里面初始化
		// 变量标记为 readonly,第一次引用类的成员时创建实例
		private static readonly object lockRoot = new object ();
 
		// 设置构造方法为私有,这样就不能在外部实例化类对象了
		private Singleton ()
		{
		}
 
		// 实例化对象的方法
		public static Singleton GetInstance ()
		{
			// 外部不能实例化对象,但是能调用类里面的静态方法
			// 外部需要调用这个方法来使用类对象,如果对象不存在就创建
			// 这里面使用两个判断是否为null的原因是,我们不需要每次都对实例化的语句进行加锁,只有当对象不存在的时候加锁就可以了
			if (myInstance == null) {
				// 锁定的作用就是为了保证当多线程同时执行这句代码的时候保证对象的唯一性
				// 锁定会让同时执行这段代码的线程排队执行
				// lock里面需要用一个已经存在的对象来判断,所以不能使用myInstance
				lock (lockRoot) {
					// 这里还需要一个判断的原因是,如果多线程都通过了外层的判断进行排队
					// 那将会实例化多个对象出来,所以这里还需要进行一次判断,保证线程的安全
					if (myInstance == null) {
						myInstance = new Singleton ();
					}
				}
			}
			return myInstance;
		}
	}
}

相关推荐

  1. C/C++面试

    2023-12-14 07:02:04       43 阅读
  2. C#面试

    2023-12-14 07:02:04       51 阅读
  3. C++面试

    2023-12-14 07:02:04       61 阅读
  4. C++面试

    2023-12-14 07:02:04       56 阅读
  5. C语言面试

    2023-12-14 07:02:04       24 阅读
  6. 360 C++ 面试

    2023-12-14 07:02:04       48 阅读
  7. C++ 134道面试

    2023-12-14 07:02:04       42 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-14 07:02:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-14 07:02:04       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-14 07:02:04       82 阅读
  4. Python语言-面向对象

    2023-12-14 07:02:04       91 阅读

热门阅读

  1. 0x71 C++ STL

    2023-12-14 07:02:04       44 阅读
  2. 理解 Linux backlog/somaxconn 内核参数

    2023-12-14 07:02:04       57 阅读
  3. 深入对象指针

    2023-12-14 07:02:04       51 阅读
  4. STM32 MCU的易坑点收集

    2023-12-14 07:02:04       51 阅读
  5. Subversion(SVN)——版本控制的艺术与实践

    2023-12-14 07:02:04       57 阅读
  6. 我对前端/互联网发展的一些看法

    2023-12-14 07:02:04       52 阅读
  7. Unity3D 任务系统的架构与设计详解

    2023-12-14 07:02:04       48 阅读