- 博客(43)
- 资源 (12)
- 收藏
- 关注
原创 C# 基础知识.局部变量 一定要初始化吗
情况是否报错原因所有执行路径都赋值✅ 不报错编译器流分析确认安全部分路径未赋值❌ 报错存在未定义行为的风险使用前肯定会被赋值✅ 不报错编译器能分析控制流out参数✅ 不报错特殊规则保证会被赋值结论:局部变量没初始化不一定会报错,只有当编译器通过流分析发现存在某条执行路径 where 变量在使用前未被赋值时,才会报错。这种智能分析使得规则既安全又实用。
2025-12-04 22:37:22
210
原创 C# 异步方法
/ 2. 处理支付 - 第二步(必须等第一步完成) var paymentResult = await paymentService.ProcessPaymentAsync(orderId);// 4. 发送确认邮件 - 第四步(必须等第三步完成) await emailService.SendConfirmationAsync(orderId);
2025-11-18 20:10:17
379
原创 类型转换汇总 之C#
set;// 显式转换// 1. 使用 TryParse 进行字符串到数值的转换// 2. 使用 as 运算符进行安全引用类型转换if (str!// 3. 使用 is 进行类型检查和模式匹配// 4. 使用 Convert 类处理边界情况。
2025-10-23 22:40:28
286
原创 C# 数据加载专题 之泛型序列化
适合需要从统一格式(XML)创建多种配置对象的场景,是类型安全的对象工厂的典型实现。"创建一个从XML配置文件反序列化的泛型对象,该对象必须继承自。为调用方提供简洁的类型推断(无需显式类型转换)将 XML 反序列化的共性逻辑抽象到基类。指定XML配置文件的绝对/相对路径。参数:XML配置文件的完整路径。返回反序列化后的具体类型对象。(3) 控制实例化。:通过泛型参数实现变体。通过泛型约束同时保证 。约束保证所有类型都有。(2) 扩展性。具体类型由调用方指定。(1) 类型安全。
2025-10-19 20:38:11
352
1
原创 WPF 疑点汇总2.HorizontalAlignment和 HorizontalContentAlignment
在 WPF 中,和是两个常用的布局属性,它们控制元素或其内容在水平方向上的对齐方式。虽然它们的名称相似,但作用对象和范围有所不同。
2025-10-15 07:55:03
337
原创 WPF 疑点汇总1.Visibility.Hidden和Visibility.Collapsed
【代码】WPF 疑点汇总1.Visibility.Hidden和Visibility.Collapsed。
2025-10-14 21:51:18
203
原创 C# 核心--事件型接口
定义一个接口,其中包含一个或多个事件成员(语法)实现该接口的类中,如何正确地提供(实现)这些事件(语法)// 定义一个事件成员event是关键字,表示该成员是一个事件;你也可以定义 自定义委托类型的事件,或使用 泛型// 定义一个接口,其中包含一个事件//事件:状态改变时触发,接口的成员隐式Public,不能有任何修饰符这个接口的意思是:任何实现了的类,都必须提供一个名为的事件,类型为。项目说明事件定义在接口中使用或语法实现类必须实现接口事件。
2025-10-14 21:49:17
353
原创 WPF中核心接口 INotifyPropertyChanged
它包含一个事件::当某个 绑定属性的值发生变化时,类需要触发这个事件,并传入发生变化的属性名(通常是WPF 的绑定系统(如)会 监听这个事件,一旦属性值变了,就会 自动更新 UI。项目说明INotifyPropertyChanged 是什么?一个接口,用于在属性值更改时通知绑定系统(WPF 数据绑定的核心)类级别实现(推荐)。
2025-10-12 12:28:11
1002
原创 WPF 绑定机制实现原理
要点说明Binding配置绑定的元数据(Path、Source、Mode等)运行时绑定实例,负责实际的值同步与事件监听WPF 属性系统基石,支持变更通知与绑定CLR 对象实现此接口以支持属性变更通知支持复杂路径绑定,如嵌套对象属性绑定流程建立目标<->源连接,初始同步,订阅变更,双向更新更新机制依赖 BindingMode,决定数据流向与同步时机。
2025-10-12 09:50:28
815
原创 WPF 之数据绑定一(Data Binding)
条件是否自动更新目标绑定模式为 TwoWay / OneWay✅ 是绑定源是 CLR 对象(非 DependencyObject)必须实现,并在属性更改时触发事件 ✅绑定源是 DependencyObject,绑定属性是 DependencyProperty✅ 自动支持变更通知没有实现 INotifyPropertyChanged 或不是依赖属性❌ 不会自动更新,UI 不会反映源的变化。
2025-10-12 09:43:00
1017
原创 WPF 深入系列.2.布局系统.布局控件.StackPanel
StackPanel 是 WPF 中用于垂直或水平堆叠子元素的简单布局控件。它非常适合用来创建一组线性排列的控件,如按钮、文本框等。下面是 StackPanel 的详细使用教程:1. 基本概念StackPanel 是一个布局控件,它会按照指定的方向(水平或垂直)依次排列它的子元素。所有子元素会根据其内容占据所需的空间,且不会重叠。2. 创建 StackPanelStackPanel 的创建非常简单,,这意味着所有子元素将从上到下依次排列。上效果在上面的例子中,三个按钮将会从上到下排列;
2025-09-24 19:45:44
796
原创 WPF 深入系列.2.布局系统.布局控件.Grid
将控件放入Grid中时,可以使用Grid.Row和附加属性来指定控件所在的行和列。有时候你可能需要让一个控件跨越多个行或列,这时可以使用和属性。最终效果如下第二行 第二列 设置了HorizonAlign=Left 同时大小是Auto ,大小自适应,水平居左对齐第二行 第三列 设置了Margin 属性控制外边距。
2025-09-24 18:58:43
530
原创 WPF 深入系列.2.布局系统.尺寸属性
了解布局计算的发生方式和时间对于在 WPF 中创建用户界面至关重要WPF布局系统是一个"测量-排列"的二阶段过程,所有尺寸属性都在这一过程中发挥作用。了解尺寸属性的层次关系,有助于我们更好地控制UI元素的布局行为,避免出现意外的尺寸变化或布局问题。
2025-09-24 15:59:45
806
原创 WPF 深入系列.1.名字空间映射
x:Classx:Key<Grid></Grid></Window>附:空间映射语法资源路径:经典!经典!经典!XAML 中导入程序集及引用命名空间_xmlns:sys="clr-namespace:system;assembly=mscorlib-优快云博客。
2025-09-22 21:55:16
782
原创 QListWidget 设置样式表后QListWidgetItem调用setBackgroundColor无效解决办法
法1.去掉QSS完全用成员函数设置item;其实QT 的QSS是一个强大而又方便的特性!法2.完全用QSS在两处设置item;
2023-01-11 22:20:36
2372
1
原创 Q_DECLARE_METATYPE 的应用场景
QT功能很强大,但如果不了解其特性,在使用中就不能发挥出其强大的特性,如Q_DECLARE_METATYPE 元对象系统。
2022-11-27 16:59:30
511
原创 Q_ENUM的作用以及QMetaEnum的优势
传统的枚举类型 在增加程序可读性方面还不够,而QT中的QMetaEnum做了很大的优化,功能很强大。
2022-11-27 11:11:18
1206
原创 MFC框架剖析
创建MFC窗口需要用来的类:CWinAppCFrameWndCWinApp是一个基类,你通过它来继承Windows应用程序对象。应用程序对象为你提供了初始化应用程序(以及它的每一个实例)和运行应用程序所需的成员函数。每个使用微软基础类库的应用程序都只能包含一个从CWinApp继承的对象。当Windows调用WinMain函数时,这个对象在其它C++全局对象都已经生成并且可用之后才被创建,WinMain函数是由微软基础类库提供的。将你的CWinApp对象定义为全局的。当你从CWinApp继承
2022-04-11 14:41:05
2309
原创 C++继承时的名字遮蔽
如果派生类中的成员(包括成员变量和成员函数)和基类中的成员重名,那么就会遮蔽从基类继承过来的成员。所谓遮蔽,就是在派生类中使用该成员(包括在定义派生类时使用,也包括通过派生类对象访问该成员)时,实际上使用的是派生类新增的成员,而不是从基类继承来的。范例#include<iostream>using namespace std;//基类Peopleclass People{public: void show();protected: char *m_nam
2022-03-31 14:16:10
166
原创 C++ 虚函数详解
虚函数对于多态具有决定性的作用,有虚函数才能构成多态规则1) 只需要在虚函数的声明处加上virtual 关键字,函数定义处可以加也可以不加2) 为了方便,你可以只将基类中的函数声明为虚函数,这样所有派生类中具有遮蔽(覆盖)关系的同名函数都将自动成为虚函数3) 当在基类中定义了虚函数时,如果派生类没有定义新的函数来遮蔽此函数,那么将使用基类的虚函数4) 只有派生类的虚函数遮蔽基类的虚函数(函数原型相同)才能构成多态(通过基类指针访问派生类函数)。例如基类虚函数的原型为virtual vo.
2022-03-31 14:05:31
911
原创 C++ 虚函数/纯虚函数/抽象类/接口
虚函数定义一个函数为虚函数,不代表函数为不被实现的函数;定义他为虚函数是为了允许用基类的指针来调用子类的这个函数。class A{public: virtual void foo() { cout<<"A::foo() is called"<<endl; }};class B:public A{public: void foo() { cout<<"B::foo() is called"<<endl; }};int ma
2022-03-29 21:54:14
3385
原创 dll剖析--->导出类
前面介绍了怎么从DLL中导出函数和变量,实际上导出类的方法也是大同小异,废话就不多说了,下面给个简单例子示范一下,也就不多做解释了。DLL头文件:#ifndef_DLL_SAMPLE_H#define_DLL_SAMPLE_H//通过宏来控制是导入还是导出#ifdef_DLL_SAMPLE#defineDLL_SAMPLE_API__declspec(dllexport)#else#defineDLL_SAMPLE_API__declspec(dllimport)#...
2022-03-27 22:38:35
701
原创 dll剖析--->导出变量
声明为导出变量时,同样有两种方法:第一种是用__declspec进行导出声明#ifndef_DLL_SAMPLE_H#define_DLL_SAMPLE_H//如果定义了C++编译器,那么声明为C链接方式#ifdef__cplusplusextern"C"{#endif//通过宏来控制是导入还是导出#ifdef_DLL_SAMPLE#defineDLL_SAMPLE_API__declspec(dllexport)#else#defineDLL_SAMPL...
2022-03-27 22:33:47
477
原创 dll 剖析--->使用|查找|调试
当一个DLL被生成后,它创建了一个.dll文件和一个.lib文件;这两个都是你需要的。要使用DLL,就需要载入这个DLL。隐式链接这里有两个方法来载入一个DLL;一个方法是捷径另一个则相比要复杂些。捷径是只链接到你.lib 文件并将.dll文件置入你的新项目的路径中去。因此,创建一个新的空的Win32控制台项目并添加一个源文件。将你做的DLL放入你的新项目相同的目录下#include"stdafx.h"#include"DLLSample.h"#pragmacomment(lib,...
2022-03-27 22:27:47
2553
原创 dll 剖析--->创建
动态链接库(DLL)是从C语言函数库和Pascal库单元的概念发展而来的。所有的C语言标准库函数都存放在某一函数库中。在链接应用程序的过程中,链接器从库文件中拷贝程序调用的函数代码,并把这些函数代码添加到可执行文件中。这种方法同只把函数储存在已编译的OBJ文件中相比更有利于代码的重用。但随着Windows这样的多任务环境的出现,函数库的方法显得过于累赘。如果为了完成屏幕输出、消息处理、内存管理、对话框等操作,每个程序都不得不拥有自己的函数,那么Windows程序将变得非常庞大。Windows的发展要求允许同
2022-03-27 22:22:35
174
原创 C++ 工厂模式/抽象工厂剖析
正文在面向对象的编程中,一般通过继承和虚函数来提供抽象能力,多态让程序在执行期,调用者只需要看到父类类型,而不需要关心继承的子类类型。举个例子: 比如有个游戏,里面的游戏的活动对象为动物,比如有老虎和猫,会对主人公进行攻击。那么可能会实现为如下:代码如下:class Animal { public: virtual void Attack() = 0; }; class Tiger : public Animal { public: virtual void At..
2022-03-26 15:35:58
334
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅