在上位机开发领域中,C#与C++两种语言是应用最多的两种开发语言,在C++语言中,与之搭配的前端框架通常以QT最为常用,而C#语言中,与之搭配的前端框架是Winform和WPF两种框架。今天我们主要讨论一下C#和WPF这一对组合在上位机开发过程中的实际应用。一、模块化概念开发一套完善的软件,离不开良好的架构,而说到架构,在C#中,Prism框架与WPF的配合可谓大大提高了开发效率,原因如下:Pri
运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。比如将两个数相加,或者比较两个数的大小,这时就需要设定一些符号来表示这两个数之间的操作关系。C#提供了许多运算符,可用于C#内置类型的基本操作。它们包括如下:算术运算符:对数值类型的数据执行算术运算;比较运算符:对操作数执行比较运算;布尔逻辑运算符:专门对bool类型的操作数执行逻辑运算;位运算符和位移运算符:对整数类型的数据执行位运算和位移运
在上一节中,我们介绍了变量的概念以及如何声明变量。当一个变量被声明,意味着在内存中开辟了一段内存,那么,这个变量在源代码中的哪些位置有效?换句话说,哪些代码段可以使用这个变量,这就是指变量的作用域。因为作用域定义了这个变量的可见性和生命周期。要了解变量的作用域,就必须要了解C#源代码的组织结构。如果把C#比作我们这个真实世界,那么,我引用一个与C#类似的例子。一个集团由多个子公司构成,一个子公司由
由于计算机的内存被划分成一个字节一个字节的排列和存储方式,类似小学生的作文本一样,一个格子就好比是一个字节,每个格子都有一个唯一的编号,这个编号就是内存地址。在C#中为了更方便的操作计算机内存,于是为这些格子进行了比较合理的分类。比如:如果程序员每次只申请一个格子,那就把这个格子取名为byte类型,这个byte类型表示1个字节,范围0-255;但是C#还规定了另一种数据类型sbyte类型,它也只占
在声明字段时,可以使用readonly关键字声明一个动态常量。readonly 关键字不同于 const 关键字。 const 字段只能在该字段的声明中初始化。 可以在字段声明和任何构造函数中多次分配 readonly 字段的值。 因此,根据所使用的构造函数,readonly 字段可能具有不同的值。但是,采用readonly修饰的字段或变量,也仅仅在声明时赋值或构造函数中赋值这两种途径。使用格式r
在C#中使用const关键字声明常量就是静态常量。是指编译器在编译时候会对常量进行解析,并将常量的值替换成初始化的那个值。哪些类型可以被const声明为常量呢?答案是C#的内置类型,但不包含System.Object。下面将这些能被const声明为常量的内置类型罗列出来。它们分别是:bool,byte,sbyte,char,decimal,double,float,int,uint,nint,nu
常量,顾名思义,不会改变的量。确切的说,在整个程序运行期间,这个量都不会发生改变。这些量在编译时是已知的,常量可以是任何基本数据类型,比如整数常量、浮点常量、字符常量、字符串常量、枚举常量、静态常量和动态常量,常量可以被当作常规的变量,只是它们的值在定义后不能被修改。若按类型区分,C#中的常量可以分为静态常量和动态常量两种。比如int a = 1 + 2;我们定义一个整型变量a,同时给它赋初值,这
Parse和TryParse是一对用来进行数据类型转换的方法,它们存在于各自的基础数据类型之中,它们都是静态方法,所以在使用时直接用类型进行限定。使用格式数据类型 变量 = 数据类型.Parse(字符串类型的值);所以,这两个方法只能将string类型转换成基础数据类型。比如我们需要将一个字符串转换成float浮点数据。string text = "12.85"; f
BitConverter主要功能是将基础数据类型转换为一个字节数组,以及将一个字节数组转换为基础数据类型。什么是数组?所谓数组,是有序的元素序列。 所以,字节数组就是由一些节字元素组成的集合,这个集合的名字就是数组名。例如:byte a = 0; byte b = 1; byte c = 2; byte d = 3; byte e = 4; byte f =
Convert类是C#提供的一个专门用于基本数据类型转换的工具。它是一个静态类型,能够将一种数据类型转换成另一种数据类型。不过,它们都是C#的基础数据类型。语法格式数据类型 变量2 = Convert.To数据类型(变量1);例如将一个字符串转换成bool型。var result = Convert.ToBoolean("True"); Console.WriteLine($"r
在C#中,将一种数据类型的值转换成另一种数据类型的过程称为类型转换。一共分为两种,分别是隐式类型转换和显示类型转换。显示类型转换又称为强制类型转换。什么是隐式类型转换?指将一个较小范围的数据类型转换为较大范围的数据类型时,编译器会自动完成类型转换,这些转换是 C# 默认的以安全方式进行的转换, 不会导致数据丢失。举个例子,肯德基的咖啡分为小杯和大杯两种,这就是两种不同的数据类型,代表量程不同。就算
在C# 3.0中提供了隐式类型var。隐式类型并不是一种真正意义上的数据类型,只是在声明变量或对象时,提供的一种”简写“语法。比如var i = 5;这时变量i的数据类型由等号后面的值决定,编译器很聪明,会根据等号后面的表达式的值推出变量的类型。var i = 5; Console.WriteLine($"i={i} , type={i.GetType()}"); var j
dynamic是C#4中引入的一种特殊类型,它可以让C#在编译时不检查对象调用了哪些操作。这表示可以绕过编译器的类型检查,并在运行时解析这些操作。dynamic类似于object类型,甚至在用法上部分相同。例如下面的代码object o = 99; dynamic d = 99; Console.WriteLine($"o的type:{o.GetType()}"); Consol
C#语言内置了3个引用类型,分别是string、object、dynamic。引用类型的变量又称为对象,可存储对实际数据的引用。实际数据是指存储在内存中某一段物理或逻辑上连续的空间上的数据,这段内存有一个首地址,而变量(或对象)保存了这个首地址(或指向首地址)。哪些关键字可以声明引用类型?classinterface委托string、object就是由class声明的引用类型。本节课我们将隆重介绍
string关键字表示一个字符串(零个或更多 Unicode 字符),它对应.NET的System.String。请注意,我们在前面的章节中所学习的bool、byte、short、int、long、float、double、decimal等基础数据类型都是值类型,因为它们都是以struct关键字声明和定义的,而string则是由class关键字声明和定义的,所以,string并不是一个值类型,而是
从技术上说,decimal表示一个浮点数值类型,它对应.NET基元类型中的System.Decimal,但是,C#语言规范中并没有将其定义为浮点类型。由于它在内存中占16个字节,所以它是一个128位的数据类型,可以存储介于-79228162514264337593543950335到-79228162514264337593543950335之间的有符号浮点数值,在数字后面带有m或M后缀用来表示d
double表示一个浮点数值类型,它对应.NET基元类型中的System.Double。通常我们把double称为双精度浮点数据。可以存储介于-1.7976931348623157E+308到1.7976931348623157E+308之间的有符号浮点数值。在内存中占8个字节,即64位。每个浮点类型的默认值都为零。在数字后面带有d或D后缀用来表示double类型。例如:double v1 = 5
float表示一个浮点数值类型,它对应.NET基元类型中的System.Single。通常我们把float称为单精度浮点数据。可以存储介于-3.40282347E+38f到3.40282347E+38f之间的有符号浮点数值。在内存中占4个字节,即32位。每个浮点类型的默认值都为零。在数字后面带有f或F后缀用来表示float类型。例如:float v1 = 56.789f;float v2 = 99
ulong关键字表示一个长整型数据,它的范围是0到18,446,744,073,709,551,615之间的无符号整数值整数值。long关键字是System.UInt64的别名。观察下面的例子namespace HelloWorld { internal class Program { static void Main(string[] ar
long关键字表示一个长整型数据,它的范围是-9,223,372,036,854,775,808到9,223,372,036,854,775,807之间的有符号整数值。long关键字是System.Int64的别名。应用示例namespace HelloWorld { internal class Program { static void
uint表示无符号32位整数。它对应了.NET中的System.UInt32。它能表示的数值范围是0 到 4,294,967,295。由于uint 类型与 CLS 不兼容,所以尽可能使用 int。声明和初始化声明一个uint类型的变量,可以按如下的写法。可以在整数后面添加u 或 U后缀。uint max = 4294967290; uint min = 0u; uint v = 123
int表示32位有符号整数,它对应.NET中的System.Int32基元类型。由于它表示32位的内存空间,也就是说,它能存储2的32次方个数据,所以,它的范围是-2,147,483,648 到 +2,147,483,647 之间的有符号整数。声明和初始化int a = 0;观察下面的例子using System; using System.Collections.Generic; u
ushort表示无符号的整型数据类型,它的范围是0到65535,在内存中占2个字节,所以它是一个16位的无符号整数,对应了.NET中的System.UInt16。声明和初始化ushort myShort = 65535;在以上声明中,整数 65535 从 int 隐式转换为 ushort。 如果整数超出了 ushort 的范围,将产生编译错误。internal class Program {
在C#中,short是一个关键字,用于声明一个变量,该变量可以存储介于-32,768到32,767之间的有符号整数值。short关键字是System.Int16的别名。它在内存中占用2个字节(16位)的空间。声明和初始化short variable_name = value;观察下面的例子internal class Program { static void Main(str
C#中的char类型对应.NET中的System.Char,它表示 Unicode UTF-16 字符。要了解char,我们必须先了解什么是Unicode UTF-16 。先说说ASCII码,自第一台计算机诞生于美国后,人们将英语大小写字母、数字、常用符号与二进制位之间的关系做了统一规定,并制定了一套字符编码规则,这套编码规则被称为ASCII编码。ASCII 编码一共定义了128个字符的
bool类型的值只有两种,分别是true和false。它对应.NET中的System.Boolean。在这个值类型的内部,其实定义了两个int类型的值分别表示true和false,另外,还定义了它的字符串形式。internal const int True = 1; internal const int False = 0; [__DynamicallyInvoka
sbyte表示一种整型数据,它的范围是-128到+127,它是一个有符号的8位整数,在.NET中与之对应的是System.Sbyte。C#中的byte类型的范围是0-255。它们两者都只能表示256个数值,只不过,一个有符号,一个没有符号。为什么有符号的sbyte的范围是-128到+127呢?首先8位的二进制数据的范围本来应该是00000000-11111111,然后我们分两种情况来讨论。第一种情
byte是我们学习的第一个数据类型,表示一个8位无符号整数,也表示一个字节。在计算机中,一个字节的长度是8位(bit)。byte类型的范围是0~255,转换为二进制是00000000~11111111。C#中byte对应的.NET数据类型是System.Byte。声明和初始化我们可以使用.NET提供的关键字声明一个Byte变量,也可以使用C#关键字声明一个byte变量,两者在内存上的长度和特性是一
在前面的章节中,我们学习了数据类型、进程、线程等概念,也熟悉了不同数据类型,本质上是指不同长度的内存空间。由于我们向计算机申请一段内存,它只会返回这个内存的地址,而这个地址是二进制形式(实际是以16进制显示),只有计算机能秒懂,人类是看不懂的。针对32位CPU,用16进制表示线性地址,其取值范围为0x00000000~0xffffffff。64位CPU,其取值范围为0x00000000000000
想必大家在使用计算机时都知道可以同时打开多个软件,比如Word、Visual Studio、QQ音乐。通常在办公的时候或者程序员在编程的时候,一边开发软件,一边听着歌曲。其实,这是操作系统为这三款不同的程序开辟了彼此独立的内存,以保证它们的良好运行。每一个程序都代表一个进程(Process)。进程中的一个执行任务(控制单元),负责当前进程中程序的执行。一个进程至少有一个线程(Thread),一个进
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号