.NET
文章平均质量分 92
MelonSuika
这个作者很懒,什么都没留下…
展开
-
C#_var
C#中有一个var类型,不管什么类型的变量,都可以用它接收,实属懒人最爱了。我没有了解过它的底层,甚至没看过它的说明文档,也不知道怎么就用上它了。凭我经验,这种 “隐式也可能是动态” 类型 应该只是效率比较低,其他不会有多少负面影响。所以在不关心效率的场合,我也就一直用着。var c;.. .此时会报错,于是我就知道了,使用var类型时,你必须声明与初始化一体,否则就会报错。还有时,我会用var来接收一些写起来很复杂类型(比如集合嵌套类型),时间一长,自己也不知道此处的var到底是啥类型。原创 2024-01-02 11:06:25 · 1090 阅读 · 0 评论 -
.NET中的Object类学习3_MemberwiseClone方法
按照MSDN文档的章节顺序来,本文应该是第五节。但是学了上一节 Finalize之后,发现其内容对实际开发帮助不大。所以这次跳过了前面的GetHashCode、GetType章节,直接来到MemberwiseClone。因为拷贝操作相对来讲还是比较常用的。名称空间:System程序集:System.Runtime.dll创建一个当前对象的浅拷贝(shallow copy)(副本)。// 返回值 Object 当前对象的一个浅拷贝注意。原创 2023-11-21 14:38:31 · 683 阅读 · 0 评论 -
.NET中的Object类学习2_Finalize方法
名称空间: System程序集:System.Runtime.dll允许对象在被垃圾收集(Garbage Collection)回收之前尝试释放资源和执行其它清理操作。~Object();析构函数(destructor)与终结器(Finalizer)本文明明讲的是Finalize方法,在MSDN文档的示例代码却是一个析构函数,这是为什么?翻译 2023-11-20 15:48:33 · 99 阅读 · 0 评论 -
.NET基础_何为托管代码
进一步搜索可了解到,runtime其实省略了一部分内容,全称一般是runtime system或runtime library(注意,这里说的是一般,因为有时确实就是字面意思,指程序运行时期,与编译时相对)。甚至它还有单独的规范,如果你感兴趣,可以阅读相关章节。但是,要注意,当代码通过运行时界限时,执行的实际管理就再次到了非托管代码手中,因此又受到了同样的限制(大概是指非托管代码的那些使用限制)。这边提到的CLR就像之前说的一样的,它比较"重",除了基础的编译执行功能,还会提供一些更高级的服务/功能。翻译 2023-11-17 16:25:37 · 102 阅读 · 0 评论 -
.NET中的Object类学习1_Object类简介&Equals方法
命名/名称空间:System程序集:System.Runtime.dll支持.NET类层次结构中的所有类,并为派生类提供低级/底层服务。(即对.NET中的所有类都提供底层支持)它是所有.NET类的最终基类;是类型层次结构的根(the root of the type hierarchy)。注意这边说Object是类型层次结构的根,为什么是类型(type)而不是类(class)。大概是因为Object是.NET系统原生的一部分。判断两个对象实例是否相等(相等性)。翻译 2023-11-16 11:23:18 · 138 阅读 · 0 评论 -
WPF——Control与Template理解
最近又翻看了下刘铁猛的《深入浅出WPF》,发现对模板章节中的部分内容有了更深的体会,所以写篇文扯扯。文章标题是Control与Template,翻译成控件与模板。将两者放一起不是无缘无故的,在WPF中,两者关系相当密切。写了这么多,主要就是谈了谈对控件以及两个模板的理解。这种理解更像是WPF开发(也不限于WPF)的内功,不对写代码直接产生效率提升,但会有长远的积极影响。原创 2023-09-12 15:22:17 · 915 阅读 · 0 评论 -
C#上位机中的单例应用思考
之前写过一篇关于单例的文——C#中单例模式的实现,讲了讲单例是什么以及在C#中的常见代码实现,那篇文的内容偏理论,并不实用。getget;();...如果你还没有用过这种容器的方式,可能会觉得很麻烦;而一旦接受了这种方式,你会发现它变成了一种定式。几乎所有应用程序都可以这么做(服务容器的这种方式本身也是一种设计模式Ioc)。这些内容不是本文要讲的东西,本文主要想讲讲上位机程序中单例的应用,以及一个场景该怎样使用单例的思考。单例是很基础的设计模式,记住它是为了。原创 2023-08-28 09:59:21 · 768 阅读 · 0 评论 -
C#_Attribute
当需要访问程序元数据中的属性时。检查和实例化程序集中的类时。在运行时构建新的类。使用 System.Relection.Emit 中的类。执行延迟绑定,访问在运行时创建的类上的方法。原创 2023-05-18 05:30:11 · 587 阅读 · 0 评论 -
Ioc中的服务生命周期
前面写过一篇博客,是关于Ioc控制反转的。那篇文中,主要介绍了Ioc思想及其常见实现方式——依赖注入(DI),然后演示了的使用(这个应该算.NET自带的DI包)。不过DI的使用上,只是简单演示流程,并未进行深入学习。本文就DI中的服务生命周期(ServiceLifetime)进一步学习。在Ioc中,Singleton用于在整个应用程序生命周期中只创建一次,每次请求都是同一个实例的情况;Scoped用于同一作用域内只被创建一次;Transient每次请求都是一个新的实例;原创 2023-05-08 22:01:09 · 797 阅读 · 0 评论 -
WPF_Application
该类封装了一个WPF应用程序。该类派生自DispatcherObject,实现了IQueryAmbient接口。Application类封装了一个WPF应用程序。Application实现了单例模式(Singleton Pattern),以提供对其窗口、属性和资源作用域服务的共享访问。通过Application.Current访问。通过Application.Current.Dispatcher可以将操作排队到UI线程中执行,这在跨线程操作中非常有用。原创 2023-04-11 11:09:02 · 456 阅读 · 0 评论 -
.NET_Dispatcher与DispatcherObject
提供用于管理线程工作项队列的服务。所以它是一个抽象的东西,用于管理线程工作项的。表示一个与Dispatcher关联的对象。原创 2023-04-10 21:21:31 · 569 阅读 · 0 评论 -
.NET是个啥_拓展
差不多一年前写过一篇博客——.NET是个啥。那篇博客基本上就是按照官方文档的翻译,并加入一些自己的理解和吐槽来写的。现在回过去看呢,虽然内容全面,但是停留在表面。(相当于回答了它是什么,它包含了什么)什么意思呢?通过那篇博客,可以知道.NET是微软的开发平台,它包含各种各样的工具。但是,微软为什么要开发这样一个平台?这个平台是怎么实现的?和其他平台/技术(如Java)有什么不一样?这些拓展的问题,似乎并没有办法得到解答。本文主要围绕这几个问题,来讨论、进一步认识.NET。原创 2023-04-05 19:43:54 · 12267 阅读 · 0 评论 -
《深入浅出WPF》——x名称空间
此时,类充当的角色就是对象的“模具”,使用它创建出来的对象在型号(即内存大小)和内部布局上都完全一样。x:Shared一定要和x:Key配合使用,如果x:Shared的值为true,那么每次检索到这个对象时(共享对象),我们得到的都是同一个对象,否则,得到的是对象的一个新副本。在WPF中,几乎每个元素都有自己的Resources属性,这个属性是个“Key-Value”式的集合,只要把元素放进这个集合,这个元素就称为资源字典中的一项(item),当然,为了能够检索到该项,就必须为它添加x:Key。原创 2023-03-14 09:56:39 · 545 阅读 · 0 评论 -
《深入浅出WPF》——XAML语法及基础知识
下面是一段简单的xaml代码:这一大段代码,其中还有两个看着像主页地址的东西……它们都是些什么呢?让我们来一个一个地分析。XAML是一种由XML派生而来的语言,所以很多XML中的概念在XAML是通用的。比如,使用标签声明一个元素(每个元素对应内存中的一个对象)时,需要使用起始标签和终止标签,夹在起始标签和终止标签中的XAML代码表示隶属于这个标签的内容。如果没有什么内容,则这个标签为空标签,可以写为为了表示同类标签中的某个标签与众不同,可以给它的特征/特性(Attribu原创 2023-03-12 15:12:42 · 2380 阅读 · 0 评论 -
WPF_ObservableCollection基本使用及其注意项
ObservableCollection基本使用如上述代码示例所示。其中要注意的是,替换ViewModel中的绑定对象并不能真实替换ItemSource。还有ObservableCollection不是线程安全的,ItemSource绑定其后,不能跨线程(UI线程外)修改ObservableCollection,关于这点会另辟文进行介绍。原创 2023-02-20 16:39:45 · 2779 阅读 · 1 评论 -
CommunityToolkit.Mvvm学习笔记(5)——ObservableValidator
有时验证一个属性需要viewmodel去访问其他的服务、数据或API。这边提供了多种方法向属性添加自定义验证,使用哪种方法取决于场景和灵活度需求。下面有个示例,它说明如何使用} }2} }100} }typeof} }nameof} }} }在本例中,有一个静态的方法,它通过注入到viewmodel中的服务对Name属性执行验证(依赖注入章节有介绍)。该方法接收name。原创 2023-02-09 16:18:53 · 2140 阅读 · 0 评论 -
.NET MAUI学习笔记——3.创建第一个程序_初级篇
没接触过的人可能不知道app shell是啥?其实我也不知道,不过在这里应该可以暂时理解为一种UI框架(或UI结构)。可以按下图理解,当VS创建.NET MAUI项目时,会生成4个重要的代码文件。可以在解决方案管理器(Solution Explorer)中看到它们:这些文件用于配置和运行.NET MAUI应用程序。每个文件都有不同的用途,它们的描述如下:这是一个用于引导应用程序的代码文件。里面的代码作为应用程序的跨平台入口点,用于配置和启动应用程序。原创 2022-10-07 22:19:25 · 3365 阅读 · 1 评论 -
.NET MAUI学习笔记——2.构建第一个程序_初级篇
想了一下,MAUI主打的是跨平台,号称『一次编写,随处运行』,如果还要出专门针对某个平台的构建指南,岂不是砸了自己的招牌。因此,不管是Windows、Android、iOS还是macOS,在构建第一个程序上,是大同小异的,官方文档中并没有给每种设备的构建列出单独的大章节,。不过安装环境这个东西,应该不需要单独开一篇文章讲吧,因为是在VS2022下开发,只需要在安装VS2022时勾选上MAUI环境即可(如果VS已经装完了但没有装MAUI的,可以再次打开安装器,重装并勾选MAUI)。原创 2022-09-26 14:22:51 · 2445 阅读 · 0 评论 -
.NET MAUI学习笔记——1.初识.NET MAUI_初级篇
NETMAppUI(简称.NET MAUI)是一个跨平台框架,它用C#和XAML来创建原生的移动端和桌面端应用程序。使用.NET MAUI,你只需维护一套共享的代码库就能开发运行在Android、iOS、macOS和Windows上的应用程序。.NET MAUI是开源的,它是Xamarin.Forms的进化版,从移动端扩展到了桌面场景,并且对UI控件进行了重建,以提高性能和可拓展性。如果你以前用过Xamarin.Forms来构建跨平台UI,你会注意到它与.NET MAUI有许多相似之处。原创 2022-09-23 14:48:56 · 3289 阅读 · 0 评论 -
EFCore学习笔记(9)——Change Tracking变更跟踪
EF Core跟踪改变是在属性层面的。简单讲就是var context = new XXXContext()得到上下文后,用诸如context.DbSet.property = xxx的语句对上下文中的实体做出更改会被跟踪到,然后调用SaveChanges会把对实体的更改写入到数据库中。这是因为EF Core会自动跟踪被查询实体的状态,然后在调用SaveChanges时检测这些实体的变化。因为同一实体被多次获取后,如果做了不同的更改,这可能会导致后期写入的时候不确定性,计算机执行是不能有二义性的。原创 2022-09-09 22:36:36 · 1812 阅读 · 0 评论 -
Quartz.NET简单使用
Quartz,中文是石英的意思,由此联想到石英钟,利用石英的某些特性制成的钟表。时间这种东西可以被高精度的计时器具切分为很小份。在每份时间中,我们都可以做一些事情,而怎么安排每份时间做什么事情,就是时间调度。因此正如上图里描述的那样,Quartz(.NET)是一个.NET开源的调度系统。它原本是流行的Java开源框架,移植到.NET就成Quartz.NET了。当然,这丝毫不影响它的强大。随便摘几句官网对它的描述,小到应用程序,大到企业系统都可以使用它。.........原创 2022-08-29 12:15:34 · 3043 阅读 · 3 评论 -
C#初识async与await
首先这里的async是一个关键字,同时也是修饰符(和abstract、static一样)。使用async修饰符可以将一个方法、lambda表达式或匿名方法指定为异步的。如果在方法或表达式上使用async修饰符,则它就被称为异步方法()。//... }官方文档原文中,接下来有这么一段话:如果你是一个异步编程的新手,或不知道异步方法如何使用await操作符来执行可能长时间运行的工作,而不阻塞调用者的线程,请阅读使用async和await异步编程的介绍。......原创 2022-08-28 14:13:11 · 828 阅读 · 0 评论 -
C# NPOI初级使用
NPOI是用于读写Excel和Word的插件包。它是Apache POI的.NET版。总之,Apache POI是一个Java的强大的、开源的Office文档处理包,而NPOI是它的.NET版本。所以在.NET平台下用NPOI来读写Office文档应该是优先级比较高的,一是稳定,二是强大,三是背后支持力量庞大。在网上介绍时有一点非常突出,使用 NPOI 你就可以在没有安装 Office 或者相应环境的机器上对 WORD/EXCEL 文档进行读写。...原创 2022-08-24 17:28:29 · 15013 阅读 · 5 评论 -
《深入浅出WPF》——资源学习
我们把有用的东西称为资源。“兵马未动,粮草先行”——程序中的各种数据就是算法的原料和粮草。程序中可以存放数据的地方有许多,可以放在数据库里、可以存储在变量里。介于数据库存储和变量存储之间,我们还可以把数据存储在程序主体之外的文件里。外部文件与程序主体分离,这就有可能丢失或损坏,为了避免丢失或损坏,编译器允许我们把外部文件编译进程序主体、成为程序主体不可分割的一部分,这就是传统意义上的程序资源(也称为二进制资源)。原创 2022-08-20 13:18:43 · 942 阅读 · 0 评论 -
C#初级_定时器
另一个用于多线程环境的定时器是System.Timers.Timer,默认情况下,它会在ThreadPool线程中引发一个事件。当创建System.Timers.Timer对象时,可以指定引发事件的时间间隔。使用Enabled属性来指定定时器是否引发事件。如果要指定只引发一次Elapsed事件,将AutoReset设置为false。AutoReset属性的默认值为true,意味着在interval属性定义的时间间隔内会定时引发Elapsed事件。............原创 2022-08-17 22:20:18 · 10749 阅读 · 0 评论 -
.NET程序配置文件
配置文件是标准的XML文件,可以用来更改应用程序的设置和设置策略。.NET框架的配置模式由元素组成,你可以在配置文件中使用这些元素来控制应用程序的行为表现。本节的内容表将反映了启动、运行时、网络和其它类型配置设置项的架构层次结构。那什么是配置文件的架构呢?说一说我的理解,首先.NET平台下可以开发各种类型的程序(Web的、桌面的、移动端的等等)。在这些不同类型程序的工程中,用到的配置文件在内容和组织形式上有所不同。那每种工程更适合怎样的内容/形式的配置文件呢?............原创 2022-08-12 11:13:09 · 1431 阅读 · 0 评论 -
WPF——样式与模板
每次写blog一定是我遇到什么实际问题了。而这次的问题,和文章标题没有特别大的关系。因为上一篇文我讲到了自定义日历控件(Calendar)的事,在我改CalendarDayButtonStyle的过程中,我发现默认的Style中出现了大量的VisualState标签。但正如上文中所说,一个自身的WPF程序员或许对VisualState相关类也会感到陌生,更何况我呢。于是我决定,对VisualState相关类进行学习。我打开微软官网,搜了下VisualState,首先在Windows App SDK的内容中看原创 2022-08-05 17:46:28 · 3007 阅读 · 0 评论 -
WPF——自定义日历
先说说历史,当微软在2006年发布WPF时,所有人都认为它少了点东西,其中最明显的就是日历控件(calendarcontrols)。这很奇怪——毕竟,WinForms都有MonthCalendar和DateTimePicker控件,为什么不把它们直接移植到WPF上呢?但是将控件移植到WPF上并不是简单的更改属性和事件名称就能达成的(如果这么简单,我现在也不用写这篇文章了)。WPF控件必须是“无外观的”(lookless)。什么是无外观(lookless)?.....................原创 2022-07-31 21:16:14 · 2204 阅读 · 0 评论 -
CommunityToolkit.Mvvm学习笔记(7)——Ioc控制反转
在Ioc中,最常见的解决方案是使用依赖注入(DI,DependencyInjection),它主要是创建大量的服务,并将服务注入到后端类中(例如,作为参数传给ViewModel构造函数)——这使得使用这些服务的代码不再依赖于这些服务的实现细节,并且可以方便地交换服务的具体实现。这里关键的点是,每个服务都能很好地使用特定平台的API,但因为这些API都是通过我们代码使用的接口抽象出来的,所以我们不需要关心它们,我们只是解析实例并使用它执行一些操作。实例,并初始化所有必要的服务,通常是在程序启动时做这些事。..原创 2022-07-24 11:52:41 · 4381 阅读 · 1 评论 -
C#中单例模式的实现
该图显示了Singleton类包含一个public的static属性,该属性返回对Singleton类的单个实例的引用。而在大多数情况下,系统中该类的数据也是唯一的。因为Singleton实例是由私有静态成员变量引用的,所以直到对Instance属性的调用第一次引用该类时,实例化才会发生。这段话也说明了设计模式的一些特点,它不是与编程语言强相关的,它不是一个函数,一个类,而是更接近一种实现机制、实现思路。尽管单例模式是一种相对简单的模式,但它也有许多不同的实现,你需要根据实现的不同,做一些权衡与选择。...原创 2022-07-22 17:16:26 · 12089 阅读 · 0 评论 -
C#静态类和静态类成员
我想通过在一个静态类中定义一个静态字符串变量来实现这个功能(因为在我认知中,C#的静态变量有全局变量的意味,我在登录时修改静态变量的值,就可以在后续连接的时候连接修改后的值对应的服务器)。如果非静态类包含需要非平凡初始化(non-trivialinitialization,大概指不是在类中写死的)的静态成员,则还应定义静态构造函数(详细信息看静态构造函数相关内容)。它是属于类的,而不是类的实例的。注意一般来说,静态成员看作是属于类的,而实例成员看作是属于对象(类的实例)的,这点很有用。...........原创 2022-07-21 14:58:03 · 3341 阅读 · 1 评论 -
EFCore学习笔记(9)——加载关联数据
如果完全跟着微软文档来学EF Core,那等学完,项目都凉透了。光一个创建模型都有十几二十节。所以应根据实际需要,对重点章节进行学习,一些知识点比较细的、深入的等后续要用到再学。对我来说,除了基本的CRUD,还有一个很重要的功能就是访问相关联的表。就是点击表上的某个字段,可以跳转查看该字段相关联的表的详细信息。而我在Query data章节中,发现了Load related data这一节,节中内容与这个功能有很大相关性。EF Core允许你在model中使用导航属性来加载关联的实体。下面是三种常用原创 2022-07-07 23:28:30 · 782 阅读 · 0 评论 -
EFCore学习笔记(8)——关系
关系(relationship)定义了两个实体(entity)之间是怎样联系的。在关系数据库中,这是由外键约束(foreign key constraint)来表示的。1. 术语的定义用来描述关系的术语有许多:以下代码展示了Blog和Post之间一对多的关系:其中,Post是一个从实体。将上面两实体类用二维表的形式表示,Blog是主实体。Blog.BlogId是主体键(该场景中,它是主键而不是候补键)。Post.BlogId是外键。Post.Blog是引用导航属性。Blog.Posts是集合导航原创 2022-07-05 14:57:39 · 1057 阅读 · 0 评论 -
EFCore学习笔记(7)——影子属性和索引属性
影子属性(Shadow properties),影子属性是一种属性,它不在.NET实体类中定义,而是在EF Core模型中为该实体类型定义的。影子属性的值和状态完全是在更改追踪器(Change Tracker)中维护的。当数据库中有不应该在映射的实体类上公开的数据时,影子属性是很有用的。索引器属性(Indexer properties),索引器属性是实体类型属性,由.NET实体类中索引器支持。可以使用.NET类实例上的索引器访问它们。它还允许你在不更改CLR类的情况下向型添加属性。影子属性最常用于外原创 2022-07-03 15:15:11 · 990 阅读 · 0 评论 -
EFCore学习笔记(6)——EF6中使用DbContext
前面几篇EF Core相关的学习笔记讲了不少EF Core中概念性的东西,但没有实际编程操作过。这篇算是开始简单使用DbContext的基本功能。相信通过前面文章对实体、上下文、数据标注这些基本概念有一定了解后,能很快地上手使用DbContext来访问数据。如果对这些概念没有太多了解也没事,因为本文是偏应用型的。那么为了使用EF来操作.NET对象进行查询、插入、更新和删除数据,首先需要创建一个Model,这个Model将定义在其中的实体和关系映射到数据库中的表上。一旦你有了一个Model,与应用程序交互的基原创 2022-07-02 22:14:35 · 2178 阅读 · 0 评论 -
EFCore学习笔记(5)——生成值
有多种方式可以生成数据库列的值:主键列通常是自动递增的整数,其他列有默认值或一些计算值等等。本文详细介绍了使用EF Core生成各种配置值的各种模式。在关系数据库中,可以用默认值去配置列;如果在该列插入的行没有设置该列的值(就是插入一行,但没手动设置值,那就会用默认值),那么就会使用默认值。可以用以下方式给属性配置默认值:还可以指定SQL片段来计算默认值:2. 计算列在大多数关系数据库中,一列可被配置成在数据库中计算它的值,通常会使用一个引用其他列的表达式:上面代码创建了一个虚拟计算列,每次从数据库原创 2022-07-01 21:55:04 · 818 阅读 · 0 评论 -
EFCore学习笔记(4)——键
前面学了关系数据库中键这个概念之后,再回过来看,EF Core中的键与关系数据库中的键可以说是一样的。键(也称码、或者关键字)。键是用作每个实体实例的唯一标识符的。EF中的大部分实体都有一个键,它会映射到关系数据库中的主键(primary key,简称PK)这个概念(还有一部分实体是可以没有键的,称为无键实体,这边不展开讲)。实体还可以拥有除了主键外的其他键(候补键,或称候补码)。按照约定,一个属性命名为Id或者 Id就会被配置成实体的主键。你可以按以下方式将单个属性配置为主...........原创 2022-07-01 07:06:10 · 1168 阅读 · 0 评论 -
C#中的using关键字
前段时间开始接触在VS下用C#开发(其实是WPF,只是说到VS,往往会扯上C#,而且WPF框架的后台语言确实主要是C#),新建一个WPF应用程序后,在MainWindow.xaml.cs文件开头会有一堆using xxx的语句。因为以前接触过C++,所以对using也不陌生,毕竟using namespace std这样的语句在C++中非常常见。所以很自然的,也很想当然的认为这边的用法和C++一样,就是引入命名空间,不必深究。不过,在最近学习EF Core的过程中,在上下文的使用时,看到了这样的语句,觉原创 2022-06-28 17:07:51 · 17645 阅读 · 4 评论 -
EFCore学习笔记(3)——实体属性
上一篇文学习了实体类型,知道了实体类型就是那个DbSet里泛型位置的类,也是面向对象的方法对现实世界事物的抽象类。在EF Core中使用模型访问数据库时,你还可以认为实体类与数据库中的数据表对应(当然这种映射关系需要用一些手段)。那这篇文来讲更加细化的实体类,对实体类中的属性进行学习。在你的模型中,每个实体类都会有一系列属性,EF Core能从数据库中读写它们。若你使用的是关系数据库,实体属性将映射到数据表的列。按照约定,所有带有getter和setter的公开属性都将被包含在模型中。可以通过以下方...原创 2022-06-27 17:21:41 · 1132 阅读 · 0 评论 -
EFCore学习笔记(2)——实体类型
上下文(Context的派生类)中包含一种类型的DbSet意味着它存在于EF Core的模型中;通常称这样的类型为实体(Entity)(所以实体就是那个类,而不是DbSet xxx)。EF Core能从数据库中读数据至实体的实例或将实体实例写入数据库,并且如果你用的是关系数据库,EF Core能通过migrations为你的实体建表。按照约定(指的是EF Core这套技术设计/使用上的规定),在你定义的上下文中的DbSet属性暴露的类型会作为实体被包含在model中。在OnModelCreating...原创 2022-06-27 10:51:19 · 1231 阅读 · 0 评论