做网站挣钱来个好心人指点一下呗南通网站推广优化公司

张小明 2026/1/8 7:20:55
做网站挣钱来个好心人指点一下呗,南通网站推广优化公司,定制软件安卓,建设网站有什么特点特色一、泛型#xff08;Generics#xff09;独立详解1. 泛型基础概念// 为什么要用泛型#xff1f; // 1. 类型安全 - 编译时检查 // 2. 代码重用 - 一套代码处理多种类型 // 3. 性能优化 - 避免装箱拆箱// 泛型类定义 public class RepositoryT {private T _item;publ…一、泛型Generics独立详解1.泛型基础概念// 为什么要用泛型 // 1. 类型安全 - 编译时检查 // 2. 代码重用 - 一套代码处理多种类型 // 3. 性能优化 - 避免装箱拆箱 // 泛型类定义 public class RepositoryT { private T _item; public T GetItem() _item; public void SetItem(T item) _item item; } // 使用 Repositoryint intRepo new Repositoryint(); Repositorystring stringRepo new Repositorystring();2.泛型方法// 独立泛型方法 public T MaxT(T a, T b) where T : IComparableT { return a.CompareTo(b) 0 ? a : b; } // 方法类型推断编译器自动推断T int maxNum Max(5, 10); // T推断为int string maxStr Max(A, B); // T推断为string3.泛型约束类型// 主要约束类型 where T : class // 必须是引用类型 where T : struct // 必须是值类型不包括可空类型 where T : new() // 必须有无参构造函数 where T : BaseClass // 必须继承自指定基类 where T : IInterface // 必须实现指定接口 where T : unmanaged // 必须是非托管类型C# 7.3 where T : notnull // 必须是非空类型C# 8.0 // 约束组合示例 public class FactoryT where T : class, ICloneable, new() { public T Create() new T(); }4.泛型接口与继承// 泛型接口 public interface IRepositoryT { void Add(T item); T Get(int id); } // 实现泛型接口 public class UserRepository : IRepositoryUser { public void Add(User user) { /* 实现 */ } public User Get(int id) { /* 实现 */ } } // 泛型继承 public class BaseClassT { } public class DerivedClassT : BaseClassT { }5.协变与逆变// 协变 (out) - 允许返回更具体的类型 interface IProducerout T { T Produce(); } // 逆变 (in) - 允许接受更泛化的类型 interface IConsumerin T { void Consume(T item); } // 使用示例 IProducerDog dogProducer new DogProducer(); IProducerAnimal animalProducer dogProducer; // 协变安全 IConsumerAnimal animalConsumer new AnimalConsumer(); IConsumerDog dogConsumer animalConsumer; // 逆变安全6.default关键字// default值 T GetDefaultValueT() { return default(T); // 引用类型返回null值类型返回0 } // C# 7.1 简写 T GetDefaultValueT() default;7.泛型与反射// 运行时泛型类型操作 Type genericListType typeof(List); Type stringListType genericListType.MakeGenericType(typeof(string)); // 创建泛型实例 Type repoType typeof(Repository); Type userRepoType repoType.MakeGenericType(typeof(User)); object userRepo Activator.CreateInstance(userRepoType);8.泛型性能注意// 避免值类型装箱 public class ValueContainerT where T : struct { // 直接存储值类型无装箱开销 private T _value; } // 使用约束限制避免性能损失 public void ProcessT(T item) where T : struct { // 对于值类型避免使用object转换 }二、字典Dictionary重点回顾1.核心特性// 键值对集合 Dictionarystring, int scores new Dictionarystring, int(); // 重要特性 // 1. 键必须唯一 // 2. 快速查找近似O(1) // 3. 无序集合但遍历顺序是稳定的2.常用操作// 添加和访问 scores.Add(Alice, 95); // 添加 scores[Bob] 87; // 添加或更新 // 安全访问 if (scores.TryGetValue(Alice, out int aliceScore)) { // 找到Alice的分数 } // 遍历 foreach (KeyValuePairstring, int kvp in scores) { Console.WriteLine(${kvp.Key}: {kvp.Value}); } // 删除 scores.Remove(Alice); // 删除指定键 scores.Clear(); // 清空所有3.性能优化// 1. 预设容量减少扩容 var dict new Dictionarystring, int(1000); // 2. 自定义比较器 var caseInsensitiveDict new Dictionarystring, int( StringComparer.OrdinalIgnoreCase); // 3. 避免频繁的ContainsKey检查 // 不推荐 if (dict.ContainsKey(key)) { var value dict[key]; } // 推荐 if (dict.TryGetValue(key, out var value)) { /* 使用value */ }三、文件操作核心要点1.常见读取方式// 1. 一次性读取小文件 string content File.ReadAllText(file.txt); // 2. 逐行读取大文件 foreach (string line in File.ReadLines(file.txt)) { // 逐行处理 } // 3. 流式读取完全控制 using (var reader new StreamReader(file.txt)) { string line; while ((line reader.ReadLine()) ! null) { // 处理每一行 } } // 4. 异步读取 string content await File.ReadAllTextAsync(file.txt);2.重要注意事项// 1. 总是使用using语句 // 错误忘记释放资源 var reader new StreamReader(file.txt); // 正确自动释放资源 using (var reader new StreamReader(file.txt)) { // 处理文件 } // 2. 异常处理 try { string content File.ReadAllText(file.txt); } catch (FileNotFoundException ex) { Console.WriteLine($文件不存在: {ex.Message}); } catch (IOException ex) { Console.WriteLine($IO错误: {ex.Message}); } // 3. 路径处理 string fullPath Path.Combine(folder, subfolder, file.txt); string extension Path.GetExtension(fullPath); string fileName Path.GetFileNameWithoutExtension(fullPath);四、委托Delegate核心机制1.委托类型// 1. 自定义委托传统方式 delegate void MyDelegate(string message); // 2. 内置泛型委托推荐 Actionstring actionDelegate; // 无返回值 Funcstring, int funcDelegate; // 有返回值 Predicatestring predicateDelegate;// 返回bool // 3. 多播委托 Action multiDelegate Method1; multiDelegate Method2; // 添加方法 multiDelegate - Method1; // 移除方法2.Lambda表达式// Lambda表达式简化委托 Funcint, int, int add (a, b) a b; Actionstring print msg Console.WriteLine(msg); // 带语句块的Lambda Funcint, int factorial n { int result 1; for (int i 2; i n; i) result * i; return result; };3.事件机制// 标准事件模式 public class Publisher { // 1. 定义事件 public event EventHandlerMyEventArgs MyEvent; // 2. 触发事件的方法 protected virtual void OnMyEvent(MyEventArgs e) { // 线程安全的调用 MyEvent?.Invoke(this, e); } } // 3. 事件参数类 public class MyEventArgs : EventArgs { public string Message { get; } public MyEventArgs(string message) Message message; }五、四大技术的关联应用1.泛型集合与文件操作// 读取CSV文件到泛型列表 public ListT ReadCsvT(string filePath, Funcstring[], T converter) { var result new ListT(); foreach (var line in File.ReadLines(filePath).Skip(1)) { var fields line.Split(,); result.Add(converter(fields)); } return result; }2.字典与委托结合// 命令模式字典存储命令处理器 var commandHandlers new Dictionarystring, Actionstring(); commandHandlers[save] data SaveToFile(data); commandHandlers[load] data LoadFromFile(data); // 执行命令 if (commandHandlers.TryGetValue(command, out var handler)) { handler(data); }3.配置读取综合示例public class ConfigLoader { // 泛型方法读取配置 public T GetConfigT(string key, T defaultValue default) { // 从文件读取配置 var lines File.ReadAllLines(config.txt); var configDict lines .Select(l l.Split()) .Where(parts parts.Length 2) .ToDictionary(parts parts[0], parts parts[1]); // 尝试获取并转换 if (configDict.TryGetValue(key, out string value)) { return (T)Convert.ChangeType(value, typeof(T)); } return defaultValue; } }六、最佳实践总结技术使用场景注意事项泛型1. 集合类2. 通用算法3. 工厂模式1. 合理使用约束2. 避免过度泛化3. 注意类型推断字典1. 快速查找2. 缓存数据3. 配置存储1. 键的唯一性2. 线程安全3. 哈希碰撞文件操作1. 配置读取2. 数据持久化3. 日志记录1. 资源释放2. 异常处理3. 编码问题委托1. 事件处理2. 回调函数3. LINQ查询1. 内存泄漏2. 线程安全3. Lambda捕获七、学习路径建议初级阶段掌握基本语法和使用场景中级阶段理解底层原理能处理常见问题高级阶段熟练组合使用进行性能优化专家阶段深入理解CLR实现解决复杂问题这四大技术是C#开发的基石建议通过实际项目练习逐步加深理解和应用能力。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

手机网站开发需求文档深圳市新房备案价查询官网

目录 1 引言 2 内容审核与文本安全的任务边界与范式演进 3 检测技术综述:从分类器到“LLM-as-judge”的复合检测 3.1 整体框架结构 3.2 数据集与标注:定义漂移与可迁移性问题 3.3 模型路线:判别式、生成式与混合式 4 过滤与缓解&#…

张小明 2026/1/2 10:34:30 网站建设

网站建设小说毕业设计网站制作流程图

智慧职教刷课脚本完整使用手册:让学习时间缩短80% 【免费下载链接】hcqHome 简单好用的刷课脚本[支持平台:职教云,智慧职教,资源库] 项目地址: https://gitcode.com/gh_mirrors/hc/hcqHome 还在为枯燥的网课学习耗费大量时间而烦恼吗?智慧职教刷课…

张小明 2026/1/7 14:07:30 网站建设

做网站如何能让外国人看得到邹平建设项目网站公示

Higress如何配置智能重试策略?5个关键步骤让API调用永不中断 【免费下载链接】higress Next-generation Cloud Native Gateway | 下一代云原生网关 项目地址: https://gitcode.com/GitHub_Trending/hi/higress 还在为微服务频繁调用失败而头疼?每…

张小明 2026/1/2 16:27:19 网站建设

糖果网站建设策划书模板wordpress data

如何快速掌握埃斯顿ER系列机器人操作:终极完整指南 【免费下载链接】埃斯顿机器人ER系列操作手册下载 埃斯顿机器人ER系列操作手册下载 项目地址: https://gitcode.com/Open-source-documentation-tutorial/e2027 想要轻松驾驭工业机器人吗?埃斯顿…

张小明 2026/1/4 0:10:06 网站建设

腾讯云主机做网站杭州公司网站制作

vue3Ts实现大文件上传 原理 分片上传的原理就像是把一个大蛋糕切成小块一样。首先就是将上传的大文件分成许多小块,每个小块大小相同,然后逐步上传这些小块到服务器,上传的时候,可以同时上传多个小块,也可以一个一个上…

张小明 2026/1/4 5:03:31 网站建设

沈阳市城乡建设局网站首页flash做的小动画视频网站

第一章:Open-AutoGLM一键部署方案概述Open-AutoGLM 是一个面向大语言模型自动化推理与生成任务的开源部署框架,旨在降低开发者在本地或云端快速搭建 GLM 系列模型服务的门槛。该方案通过容器化封装与自动化脚本集成,实现从环境配置、模型下载…

张小明 2026/1/4 7:23:09 网站建设