01-C#.Net-泛型-面试题

.Net 面试题整理(一) .Net 面试题整理(一) 好久的资料了,拿出来分享给大家,主要是记录一些面试题整理。Main函数是什么?在程序中使用Main函数有什么需要注意的地方? Q:程序的入口函数!函数名字不能改变;一个程序中有且只有一个Main函数。 CLR是什么?程序集是什么?当运行一个程序集的时候,CLR做了什么事情? Q:Common Language RunTime 公共语言运行时。 编译后代码的集合 阅读详情

Q1:什么是泛型?为什么要用泛型?

出题意图:考察对泛型基本概念的理解,以及是否能说清楚它解决了什么问题。

答:

泛型是一种"延迟声明类型"的机制。声明时用占位符 T 代替具体类型,调用时再指定。

引入泛型主要解决两个问题:

  1. 性能问题:用 object 作为通用参数时,值类型会发生装箱/拆箱,有额外的堆分配和 CPU 开销。泛型在 CLR 层面对值类型生成专用代码,完全避免装箱,性能等同于专用方法。
  2. 类型安全问题:object 参数在编译期无法检查类型,强制转换错误只能在运行时暴露。泛型在编译期就能检查类型,错误提前发现。
// 泛型方法:一个方法,任意类型,无装箱,编译期安全
public static void Show<T>(T value)
{
    Console.WriteLine($"{typeof(T).Name}: {value}");
}

Show<int>(123);   // 显式指定
Show("hello");    // 类型推导,省略尖括号

Q2:泛型是语法糖吗?底层原理是什么?

出题意图:区分候选人是否真正理解泛型的实现机制,还是只会用。

答:

泛型不是语法糖。语法糖是编译器提供的便捷写法,编译后转换成等价的普通代码。泛型是由 CLR 在底层真正支持的,从 .NET Framework 2.0 开始引入,编译器和运行时都必须支持。

底层机制:

  • 编译器将泛型类/方法编译成带占位符的 IL 代码,例如 List\1[T]、Dictionary`2[TKey,TValue]`
  • JIT 编译时:
    • 值类型(int、struct 等):CLR 为每种类型生成一份独立的本地代码,不存在装箱
    • 引用类型:CLR 共享同一份本地代码(引用类型内存布局相同,都是指针大小)

这就是为什么泛型方法性能等同于专用方法,而远优于 object 方法。


Q3:泛型方法的性能为什么优于 object 参数方法?

出题意图:考察对装箱拆箱机制的理解,以及泛型性能优势的具体原因。

答:

核心原因是装箱拆箱。值类型(如 int)传入 object 参数时,需要在堆上分配新对象(装箱),取出时再拆箱,有额外的内存分配和 GC 压力。泛型方法对值类型生成专用代码,直接操作,无需装箱。

int value = 123;

// Object方式:每次调用都装箱
ShowObject(value);  // int → object(堆分配)→ int

// 泛型方式:无装箱,直接操作 int
Show<int>(value);

性能差异在大量循环 + 值类型场景下最明显,例如 1 亿次调用,object 方法耗时可能是泛型方法的数倍。


Q4:泛型约束有哪些?分别有什么作用?

出题意图:考察泛型约束的掌握程度,这是实际开发中经常用到的。

答:

约束语法作用
基类约束where T : PeopleT 必须是 People 或其子类,方法内可访问 People 的成员
接口约束where T : ISportsT 必须实现该接口,方法内可调用接口方法
引用类型约束where T : classT 只能是引用类型
值类型约束where T : structT 只能是值类型,且可以直接 new T()
无参构造约束where T : new()T 必须有无参构造函数,方法内可 new T()
枚举约束where T : EnumT 必须是枚举类型
父子关系约束where T : ST 必须是 S 或 S 的子类

多个约束可以叠加:

// T 必须是引用类型、实现 IEntity 接口、有无参构造函数
public class Repository<T> where T : class, IEntity, new()
{
    public T Create() => new T();
}

解答思路:回答时结合实际场景,比如"基类约束让我在泛型方法里能访问特定属性,避免了强制转换;new() 约束让我可以在方法内部创建实例"。


Q5:以下代码有什么问题?如何用泛型约束解决?

public class Repository<T>
{
    public T Create()
    {
        return new T(); // 编译错误
    }

    public void Save(T entity)
    {
        Console.WriteLine(entity.Id); // 编译错误
    }
}

出题意图:考察泛型约束的实际应用,以及如何通过约束解决编译时类型安全问题。

答:

两个错误原因:

  1. new T():编译器不知道 T 是否有无参构造函数
  2. entity.Id:编译器不知道 T 是否有 Id 属性

解决方案:

public interface IEntity
{
    int Id { get; set; }
}

// 加上约束:T 必须是引用类型、实现 IEntity、有无参构造函数
public class Repository<T> where T : class, IEntity, new()
{
    public T Create()
    {
        return new T(); // ✓
    }

    public void Save(T entity)
    {
        Console.WriteLine(entity.Id); // ✓ 可以访问 Id
    }
}

解答思路:识别编译错误的根本原因 → 选择对应约束 → 理解约束组合使用。


Q6:List<Animal> 和 List<Cat> 有继承关系吗?为什么?

出题意图:考察对泛型类型系统的理解,引出协变逆变话题。

答:

没有继承关系。即使 Cat 继承自 Animal,List<Cat> 和 List<Animal> 也是完全独立的两个类型:

List<Animal> list = new List<Cat>(); // 编译报错

原因:泛型类用不同类型参数实例化后,得到的是不同的类型,彼此没有任何关系。这是 C# 类型系统的设计,目的是保证类型安全——如果允许上面的赋值,就可以往 list 里 Add(new Dog()),但实际底层是 List<Cat>,运行时会崩溃。

如果需要这种灵活性,应该使用协变(IEnumerable<out T>)。


Q7:什么是协变和逆变?请解释以下代码的编译结果。

// 片段1
List<Animal> list1 = new List<Cat>();           // ?

// 片段2
IEnumerable<Animal> list2 = new List<Cat>();    // ?

// 片段3
public interface IReader<out T> { T Read(); }
IReader<Animal> reader = new Reader<Cat>();     // ?

// 片段4
public interface IWriter<in T> { void Write(T item); }
IWriter<Cat> writer = new Writer<Animal>();     // ?

出题意图:这是中高级 .NET 面试的高频考点,考察对协变逆变的真实理解。

答:

  • 片段1:编译错误 ❌ — List<T> 不支持协变
  • 片段2:编译成功 ✓ — IEnumerable<out T> 支持协变
  • 片段3:编译成功 ✓ — out T 协变,右边子类,左边父类
  • 片段4:编译成功 ✓ — in T 逆变,右边父类,左边子类

协变(out):T 只能作为返回值,允许"右边用子类,左边用父类"。

public interface ICustomerListOut<out T>
{
    T Get();           // ✓ 可以作为返回值
    // void Show(T t); // ✗ 不能作为参数
}

ICustomerListOut<Animal> list = new CustomerListOut<Cat>(); // ✓

逆变(in):T 只能作为参数,允许"右边用父类,左边用子类"。

public interface ICustomerListIn<in T>
{
    void Show(T t);    // ✓ 可以作为参数
    // T Get();        // ✗ 不能作为返回值
}

ICustomerListIn<Cat> list = new CustomerListIn<Animal>(); // ✓

记忆口诀:

  • out 协变:出去的(返回值),子类 → 父类,"出口放宽"
  • in 逆变:进来的(参数),父类 → 子类,"入口放宽"

注意:协变逆变只适用于泛型接口和泛型委托,不适用于泛型类。


Q8:协变逆变为什么只适用于接口和委托,不适用于泛型类?

出题意图:考察对协变逆变设计原理的深层理解,区分中高级候选人。

答:

因为泛型类的类型参数既可以出现在参数位置,也可以出现在返回值位置,无法同时满足协变和逆变的安全约束。

以 List<T> 为例,它既有 Add(T item)(T 做参数),又有 T this[int index](T 做返回值)。如果允许协变:

List<Animal> list = new List<Cat>(); // 假设合法
list.Add(new Dog()); // 往 List<Cat> 里加了一只 Dog,类型系统崩溃

而接口可以通过 in/out 约束,明确规定 T 只出现在参数或返回值的某一侧,编译器在定义接口时就能验证安全性。

IEnumerable<out T> 只有 GetEnumerator()(T 只做返回值),所以可以协变。IList<T> 因为有 Add(T) 和 T this[int],所以不支持协变。


Q9:泛型缓存和字典缓存有什么区别?

出题意图:考察对泛型静态成员特性的理解,以及实际应用能力(ORM、框架开发场景)。

答:

字典缓存:用一个静态 Dictionary<Type, T> 存储,以类型为 key,所有类型共享一个字典。

public class DictionaryCache
{
    private static Dictionary<Type, string> _cache = new Dictionary<Type, string>();

    public static string GetCache<T>()
    {
        Type type = typeof(T);
        if (!_cache.ContainsKey(type))
            _cache[type] = $"{typeof(T).FullName}_{DateTime.Now:yyyyMMddHHmmss.fff}";
        return _cache[type];
    }
}

缺点:每次调用都要查字典(哈希查找),多线程下需要加锁。

泛型缓存:利用泛型类的特性——每种类型参数对应一个独立的类副本,静态字段也是独立的。

public class GenericCache<T>
{
    private static readonly string _typeTime;

    static GenericCache()
    {
        // 每种 T 的静态构造函数只执行一次,CLR 保证线程安全
        _typeTime = $"{typeof(T).FullName}_{DateTime.Now:yyyyMMddHHmmss.fff}";
    }

    public static string GetCache() => _typeTime;
}

// GenericCache<int> 和 GenericCache<string> 是完全不同的类,各有独立的静态字段
GenericCache<int>.GetCache();
GenericCache<string>.GetCache();

优点:直接访问静态字段,无需字典查找,性能更高;CLR 保证静态构造函数线程安全,无需手动加锁。

实际应用:在手写 ORM 框架时,用泛型缓存存储实体类的反射信息(属性列表、表名等),避免每次操作都重复反射,大幅提升性能。


Q10:泛型方法调用时,什么情况下可以省略类型参数?

出题意图:考察对编译器类型推断的理解。

答:

当编译器能从传入的参数推断出类型参数时,可以省略尖括号:

public static void Show<T>(T value) { }

Show<int>(123);   // 显式指定
Show(123);        // 省略,编译器推断 T = int
Show("hello");    // 省略,编译器推断 T = string

如果类型参数只出现在返回值中,无法从参数推断,则必须显式指定:

public static T Create<T>() where T : new() => new T();

var obj = Create<MyClass>(); // 必须指定,无法推断

Q11:泛型类的子类继承有哪些方式?

出题意图:考察对泛型继承的理解,实际项目中经常遇到。

答:

public abstract class GenericBase<T>
{
    public void Show(T t) { }
}

// 方式一:子类固定类型参数,子类本身不是泛型类
public class ChildA : GenericBase<int> { }

// 方式二:子类继续保持泛型,把类型参数传递给父类
public class ChildB<S> : GenericBase<S> { }

两种方式各有适用场景:固定类型适合具体业务类(如 UserRepository : Repository<User>),保持泛型适合通用基础设施类(如通用仓储基类)。


Q12:default(T) 有什么用?

出题意图:考察在泛型方法中处理默认值的能力。

答:

在泛型方法中,无法直接写 return null 或 return 0,因为 T 可能是值类型也可能是引用类型。default(T) 返回 T 的默认值:

  • 引用类型:返回 null
  • 值类型:返回对应的零值(int → 0,bool → false,DateTime → 0001-01-01)
public T GetDefault<T>()
{
    return default(T); // C# 7.1 之后可简写为 default
}

综合应用题:设计通用仓储

题目:设计一个通用仓储接口和实现类,要求:实体必须有 Id 属性、必须是引用类型、支持基本 CRUD、用泛型缓存优化反射性能。

出题意图:综合考察泛型约束、泛型缓存、接口设计,是中高级面试常见的大题形式。

答:

// 实体接口
public interface IEntity
{
    int Id { get; set; }
}

// 泛型缓存:缓存实体类型的反射信息,每种类型只反射一次
public class EntityCache<T> where T : class
{
    private static readonly string _tableName;
    private static readonly PropertyInfo[] _properties;

    static EntityCache()
    {
        _tableName = typeof(T).Name;
        _properties = typeof(T).GetProperties();
    }

    public static string TableName => _tableName;
    public static PropertyInfo[] Properties => _properties;
}

// 仓储接口
public interface IRepository<T> where T : class, IEntity, new()
{
    T GetById(int id);
    IEnumerable<T> GetAll();
    void Add(T entity);
    void Delete(int id);
}

// 仓储实现
public class Repository<T> : IRepository<T> where T : class, IEntity, new()
{
    private readonly List<T> _store = new();

    public T GetById(int id)
    {
        Console.WriteLine($"查询表: {EntityCache<T>.TableName}");
        return _store.FirstOrDefault(e => e.Id == id);
    }

    public IEnumerable<T> GetAll() => _store;

    public void Add(T entity)
    {
        entity.Id = _store.Count + 1;
        _store.Add(entity);
    }

    public void Delete(int id)
    {
        var entity = GetById(id);
        if (entity != null) _store.Remove(entity);
    }
}

// 实体类
public class User : IEntity
{
    public int Id { get; set; }
    public string Name { get; set; }
}

// 使用
var repo = new Repository<User>();
repo.Add(new User { Name = "张三" });
var user = repo.GetById(1);

设计要点:

  • where T : class, IEntity, new() 三重约束保证类型安全
  • 泛型缓存避免重复反射,每种实体类型只初始化一次
  • 接口与实现分离,遵循依赖倒置原则
20 道 C# 面试题(针对新生)2023 C# 中的引用类型是存储对存储数据的内存位置的引用的类型,而不是实际数据本身。C# 中的委托是一种引用类型,表示具有特定签名的方法。在C#中,多态性可以通过重载(在同一类型中使用相同的方法名和不同的参数)和覆盖(在派生类中重新定义基类方法)来实现。引用类型的“Equals”的默认实现会检查引用相等性,但可以在自定义类中覆盖它以提供基于值的比较。构造函数是类中的一种特殊方法,在创建该类的对象时调用该方法。C# 中的索引器是类成员,允许您使用索引表示法访问对象的元素,类似于访问数组或集合中的元素的方式。 阅读详情

相关推荐

20道(中级)C#面试题

语言集成查询 ( LINQ ) 是 C# 3.0 (.NET Framework 3.5) 中引入的一项功能,它提供一组查询运算符和统一的查询语法,用于查询、筛选和转换来自各种类型数据源(如集合、XML、数据库,甚至自定义源。throw ex:当您捕获异常并想要抛出新的或修改的异常对象时,您可以使用语句throw ex,其中ex是异常的实例。这使得应用程序更加高效和响应迅速,特别是在 I/O 密集型操作(例如,调用 Web 服务、读取文件或使用数据库)或可以并行化的 CPU 密集型操作的情况下。

我的博客,不一样的自我表达 3098

15个基本的C#面试问题

1、给定一个int数组,编写方法以统计所有偶数的值。 有很多方法可以做到这一点,但是最直接的两种方法是: static long TotalAllEvenNumbers(int[] intArray) { return intArray.Where(i => i % 2 == 0).Sum(i => (long)i); } 还有就是 static long TotalAllEvenNumbers(int[] intArray) { return (from i in intArray

极客神殿 1万+

C#常用面试题14道

它将现实世界中的事物抽象成对象,通过定义对象的属性(数据)和行为(方法),以及对象之间的关系和交互,实现软件系统的模块化、可维护性和可扩展性。通过使用泛型,我们可以在编译时指定具体的类型,并在运行时获得类型安全和高效的代码执行。在C#中,属性(Property)是一种特殊的成员,用于封装类的字段,并提供对其读取和写入的访问方式。属性允许我们在访问类的字段时使用类似于字段的语法,同时可以在属性的 getter 和 setter 中添加逻辑以控制对字段的访问。选择适当的集合类型取决于数据结构和操作的要求。

2401_83470102的博客 3091

C#常用面试题

请记住,在面试过程中,不仅仅是回答问题,还要展示您的思考过程、编程经验和解决问题的能力。它将现实世界中的事物抽象成对象,通过定义对象的属性(数据)和行为(方法),以及对象之间的关系和交互,实现软件系统的模块化、可维护性和可扩展性。在C#中,属性(Property)是一种特殊的成员,用于封装类的字段,并提供对其读取和写入的访问方式。e. 抽象类和接口:C#提供抽象类和接口的概念,抽象类允许定义一些方法的实现并提供派生类重写的虚方法,接口定义一组方法的契约,类可以实现一个或多个接口。

itzhangzx的博客 1万+

C#.Net筑基-深入小数内部存储的秘密

为什么0.1 + 0.2不等于0.3?为什么16777216f等于16777217f?为什么金钱计算都推荐用decimal?本文主要学习了解一下数字背后不为人知的存储秘密。

jjc4261的博客 1156

C#.NET Core 笔试题 架构 优化 性能提升 2024 金九银十 最新 资深 八股文-优快云博客

76.说说EFCore查询的性能调优小技巧。 77.EFCore 如果通过数据生成实体和DbContext? 78.说说对SaveChanges的理解。 79.说说对EFCore中EntityState的理解。 80.说说什么是导航属性和引用属性。 81.ASP.NET Core管道里面的map拓展有什么作用? 82.EFCore有几种配置映射方式? 83..NET中,如果需要在指定的时间或者某个周期内,执行一个操作,比如清空某个日志表,有哪些方式? 84..NET Core中,WebAPI和Minimal

cao919的专栏Net 1443

.Net 面试题

.Net 面试题(欢迎大家加入更多 .Net 面试题) 大家方便大家,大家为了大家!争取让我们的.Net面试题集成为互联网最全最新的.Net面试题集。产品表                   销售计划表ProductID 产品名 单价 ProductID 客户名  订货数量  销售单价1 name1 110 2 m 2 250 2 name2 220 1 n 3 1103 name3 330 3

蓝色碎片 4529

C#面试题及详细答案120道(01-10)-- 基础语法与数据类型

C#与.NET部分重点解析了7个核心问题:1)C#与.NET的依存关系;2)值类型与引用类型的内存差异;3)装箱拆箱的性能损耗;4)string/String与int/Int32的实质等价性;5)const与readonly的初始化区别;6)可空类型的应用场景;7)ref与out关键字的参数传递机制。内容包含原理对比、代码示例和优化建议,适合开发者系统掌握C#核心概念。(1

大剑师兰特的GIS世界 1952

争取让我们的.Net面试题集成为互联网最全最新的.Net面试题集。

争取让我们的.Net面试题集成为互联网最全最新的.Net面试题集。最全的C/C++面试题集(C/C++试题和部分答案)一道有趣的C#考试题目 某公司招收.net高级程序员的试卷 .Net面试题集(最全最新)(欢迎加入更多.Net 面试题)GOOGLE面试题 产品表                   销售计划表ProductID 产品名 单价 ProductID 客户名  订货数量  销售单价1

jojozhuang的专栏 5540

C#高级编程第六版源码实战:泛型、LINQ与上位机开发

C#开发中,泛型、LINQ、委托与事件是构建可扩展系统的核心概念。深入理解这些特性的原理,并掌握其在异步编程、反射与Attribute机制中的应用,是提升代码质量与开发效率的关键。在工业上位机、Socket通讯等实际场景中,这些技术能够有效解决数据采集、UI刷新、通信协议解析等常见痛点。面对大量网上的零散教程,如何系统性地将这些知识转化为项目能力?《C#高级编程(第六版)》源码提供了一个宝贵的实践入口。文章基于作者的真实翻读经验,梳理了源码的结构与核心示例,介绍了从泛型约束、LINQ惰性求值到事件驱动、反射

weixin_33824385的博客 216

模拟波束赋形 vs 数字波束赋形:5G天线设计中的成本与性能权衡

本文深入剖析了5G天线设计中模拟波束赋形与数字波束赋形的核心差异,重点探讨了二者在硬件成本、功耗、网络覆盖能力和频谱效率等方面的权衡。文章指出,模拟方案成本低但灵活性有限,数字方案性能强大但代价高昂,而混合波束赋形已成为主流折中方案。决策需紧密结合具体的部署场景、性能要求和总拥有成本进行综合考量。

weixin_28432777的博客 840

.NET和NET CORE 100道基础面试题

1.面向对象的语言特性? A:封装性、继承性、多态性。 2.在.NET中所有类的基类是? A:Object。 3.在C#中,&和&&的区别? A:&是按位与运算符(或取地址运算符),&&是条件与运算符(也叫逻辑与运算符)。 4.委托声明的关键字是? A:delegate。 5.在.NET中所有可序列化的类都被标记为? A:Serializable。 6.一个类不想被继承应该? A:标记为sealed。 7.简单描述CLR? A:CLR(Common Langu

极客神殿 1万+

青龙人形机器人硬件平台设计全解析:从构型到控制系统的实战指南

本文全面解析了青龙人形机器人硬件平台的设计与实现,涵盖构型设计、驱动系统、能源方案及控制系统等核心模块。重点介绍了43个自由度的仿生学实践、关节模组的技术突破以及多模态感知融合等创新设计,为开发者提供了从理论到实战的完整指南。

embedding5hiker的博客 890

Net面试题收集

 .NET面试题:产品表                   销售计划表ProductID 产品名 单价 ProductID 客户名  订货数量  销售单价1 name1 110 2 m 2 250 2 name2 220 1 n 3 1103 name3 330 3 n 1 3004 name4 440   4 m 2 4001.是否能删除产品表中的name2?请说明理由与过程。2.将销

Blog 1956

【IEEE】从Accept到Online:详解Proof校样阶段的关键操作与避坑指南

本文详细解析了IEEE论文从Accept到Online的Proof校样阶段关键操作流程与避坑指南。重点介绍了IEEE Author Gateway平台的使用技巧、校样稿首页的风险点检查,以及多人协作校对策略,帮助作者高效完成论文出版前的最后审核,确保学术成果准确呈现。

weixin_30591551的博客 356

第12篇:TMC2240 CoolStep节能功能|软件配置+功耗测试(保姆级)

本文介绍了TMC2240驱动芯片的CoolStep节能功能,通过动态调节电机电流实现功耗优化。CoolStep利用StallGuard技术实时检测负载,自动调整运行电流,空载时可降低50%以上功耗。文章详细讲解了节能原理、寄存器配置方法和参数校准步骤,提供可直接复用的STM32代码。该功能特别适合电池供电设备,能显著延长续航时间,同时保持电机性能稳定。配置时需注意SG阈值、电流步长等关键参数,并可与静音模式叠加使用。

BackCatK Chen的博客 917

分享最近.Net面试题目

dotnet面试,之前遇到的几道相关面试题目》》》

dotNet全栈开发 7418

YOLOv8改进:基于EfficientNetV2均衡缩放网络的特征提取层优化【YOLOv8】

YOLO(You Only Look Once)系列模型以其高效的实时目标检测能力而闻名。YOLOv8作为该系列的最新版本,通过引入改进的网络结构和算法优化,进一步提升了目标检测的性能。然而,YOLOv8在特征提取阶段的网络结构仍有改进的空间。EfficientNetV2是一种基于均衡缩放的卷积神经网络,它通过优化网络的宽度、深度和分辨率来实现高效的特征提取。与之前的EfficientNet版本相比,EfficientNetV2在速度和精度上都有显著提升,尤其在处理复杂目标检测任务时表现尤为突出。

博客 1582

.Net 面试题(欢迎大家加入更多 .Net 面试题)

争取让我们的.Net面试题集成为互联网最全最新的.Net面试题集。最全的C/C++面试题集(C/C++试题和部分答案)一道有趣的C#考试题目 某公司招收.net高级程序员的试卷 .Net面试题集(最全最新)(欢迎加入更多.Net 面试题)GOOGLE面试题 产品表                   销售计划表ProductID 产品名 单价 ProductID 客户名  订货数量  销售单价1

专栏 6217

SKUA-GOCAD入门教程-第七节 点的创建与编辑3

本文介绍了四种从井数据创建点集的方法

江洋大葱的博客 963

Python控制程控电源(USB)

随着智能电动汽车行业的持续发展,汽车电子或嵌入式设备在软硬件的测试中,都会使用程控电源供电,特别是自动化测试、压力测试场景必定使用到程控电源控制,控制电源上下电,监听电源电流、电压等,以下就以常见的艾德克斯程控电源为例,分享如何通过USB连接方式Python语言来控制程控电源。

测试领域技术分享 2864

.Net面试题1

.Net面试题 0.122019.03.01 10:29:58字数 1989阅读 875 简介 古人云“温故而知新,可以为师矣”。希望总结的面试题能对大家的面试带来帮助。 本文面向的阅读读者是 刚毕业的萌新 工作不久换工作同学 1.C# 值类型和引用类型的区别 赋值时的区别:值类型的变量将直接获得一个真实的数据副本,初值为0;而对引用类型的赋值仅仅是把对象的引用赋给变量,这样就可能导致...

weixin_42045719的博客 275

matlab 一维相位解缠

一维相位解缠算法的matlab代码实现。

点云侠的博客 372

歪答正着-C#常见面试题(转)

问:泛型是什么?答:泛型(Generic)是一种特殊的机制。用于“算法重用”,比如排序,搜索,一般用在集合类中。它允许类型(Type)作为参数,在类、结构、接口和方法使用。歪答:泛型相当于空头发票,随便你往里头填什么内容,反正都能报销,但是不填肯定不行。问:.NET中值类型和引用类型的区别?答:值类型直接存在堆栈中,引用类型存放在托管堆中,堆栈只存放它的地址;操作值类型

程序员天空 927

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

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

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

企业级.net笔试题,面试题第一篇

当前位置:首页 >> IT >> .NET 2010 .net开发程序员面试题 106 类别:ASP.NET发布时间:2010-12-26来源:一个顶俩年份:2010进入 .net开发基础知识面试题系列一 99 类别:ASP.NET发布时间:2010-12-26来源:一个顶俩年份:2010进入 .Net笔试38道题(

situ7886的专栏 656

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

上一篇: 02-C#.Net-反射-学习笔记
下一篇: 02-C#.Net-反射-面试题
似水明俊德
博客等级 码龄8年 247粉丝 276原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值