C#
叶殇花葬
心有猛虎 细嗅蔷薇
展开
-
值类型和引用类型的区别
在C#中,变量是值类型还是引用类型取决于其数据类型。值类型的变量将直接存储数据,并存储在内存的堆栈中;而引用类型的变量只存储对数据内存地址的引用,数据则存储在托管堆中。 C#包含15个预定义类型,其中有13个值类型,即常用的基本数据类型,如int、float、bool等;只有string和object类型为引用类型。原创 2015-11-16 17:11:18 · 224 阅读 · 0 评论 -
C# 异常
异常处理是捕获预期的事件和突然事件的技术,其目的是在发生错误之前预料错误。在遇到以下情况时,会引发异常:1、操作资源不可用;2、公共语言运行库遇到意外情况;3、自定义抛出异常。在.NET Framework中,类Exception表示基类异常,其他异常从其继承而来。该类常用的属性有StackTrace属性、InnerException属性、Message属性、HelpLink属原创 2015-11-23 15:56:39 · 558 阅读 · 0 评论 -
C# 扩展方法
在以往的编程模式里,一旦一个类型定义完毕并编译完成,它就基本上呗确定了,唯一的修改方法就是打开代码,更新之后重新编译。在C#中,扩展方法却运行开发者扩充任何类,甚至是标记为封装的类。使用扩展方法时要注意如下事项:第一个限制,必须定义在静态类中,并且每个扩展方法也必须声明为静态的;第二个限制,所有扩展方法的第一个参数都是用this关键字;无论是直接访问内存中的实例,还是静态地通过静态原创 2015-11-23 21:50:43 · 333 阅读 · 0 评论 -
C# 预处理器指令
预处理命令虽然不是可执行的语句,但其却是可以向编译器提供如何编译代码指令的语句。在使用预处理指令时要注意,过度使用会让代码很难读懂,如果使用不当还会使代码的某些部分成为只读属性。C#预处理命令#define 定义预处理变量,一旦定义了预处理变量,它可以再整个源文件中使用#undef 取消预处理变量#if if条件原创 2015-11-23 21:08:37 · 679 阅读 · 0 评论 -
C# 对象类型的转化
is关键字:可以检查对象是否与特定的类型兼容,可以用它来判断对象是否为给定的类型。定义格式为 operand is type在上述定义中,当type是一个类,而operand也是该类型,或继承了该类型,或封箱到该类型中时,结果为true; 当type是一个接口类型,而operand也是该类型,或者执行该接口的类型时,结果也为t原创 2015-11-23 15:01:23 · 1379 阅读 · 0 评论 -
C# 委托
当定义了委托,实际上是定义了一个特定类型的对象,而不是一个具体的实例。这个委托类型只指定它代表的方法的返回值类型和参数表。要检查代表具体方法的委托,必须首先创建一个委托实例。1、在使用委托之前,必须先声明委托。声明委托,就像声明方法一样简单,基本格式如下:delegate-modifiers return-type delegate-name(argument-list)2、声明委托之原创 2015-11-23 16:33:56 · 303 阅读 · 0 评论 -
C# 类的继承
在类的继承中,需要注意以下一些细节:1、通过继承可以简化类的定义;2、在C#中只支持单继承,不允许多重继承。一个子类只能有一个父类,不允许一个类直接继承多个类。但可以有多层继承,即一个类可以继承某一个类的子类。3、子类继承父类的所有变量和成员方法,但不继承父类的构造函数。在子类中,如果要使用父类的构造函数,应使用base(参数列表)语句。如果子类的构造方法中没有显式调用父类构造方法,也原创 2015-11-23 13:19:38 · 497 阅读 · 0 评论 -
C# 构造函数与析构函数
构造函数用于执行类的实例的初始化。每个类都有构造函数,即使没有声明它,编译器也会自动提供一个默认的构造函数。在访问一个类时,系统将最先执行构造函数中的语句。实际上,任何构造函数的执行都隐式地调用了系统提供的默认的构造函数base()。(1)构造函数的概念类可能有多个接收不同参数的构造函数。其使开发人员可设置默认值、限制实例化以及编写灵活且便于阅读的代码。使用构造函数需要注意一下几个问题原创 2015-11-22 16:16:49 · 397 阅读 · 0 评论 -
C#类修饰符
abstract:不能创建该类的实例,这意味着该类的作用是作为基类,抽象类不能密封;internal:该类只能从同一个程序及的其他类中访问。这是嵌套类型的默认访问方式;new:只用于嵌套的类,它指明类隐藏一个同名的被继承成员;private:嵌套类,只能在定义它的类中访问;protected:嵌套类,只能从定义它的类中和自此派生的类中访问;public:该类的实例可以被任何其他原创 2015-11-22 15:57:36 · 273 阅读 · 0 评论 -
C# 多态性
在c#中,多态性的定义是:同一个操作作用于不同类的实例,不同类将进行不同的解释,最后产生不同的执行结果。其支持两种类型的多态性,即编译时多态性和运行时多态性。编译时,多态性是通过重载实现的,其根据传递的参数、返回的类型等信息决定实现何种操作。运行时,多态性是指直到系统运行时才根据实际情况决定实现何种操作,其是通过虚方法来实现的。虚方法:通过在方法声明语句的访问修饰符和返回类型之间放置vir原创 2015-11-23 13:31:10 · 348 阅读 · 0 评论 -
C# 迭代器
迭代器是开发人员能够在类和结构中遍历各自的数据结构的一种功能,这种功能可以用两种技术来实现,即foreach语句和迭代器(Iterator)。foreach:如果要对一个类使用foreach语句,必须确保这个类提供了foreach循环所必须的GetEnumerator、MoveNext、Reset和Current成员。这些成员分别在IEnumerable和IEnumerator接口中进行定原创 2015-11-23 09:20:08 · 252 阅读 · 0 评论 -
C# 类与接口
类在C#中,所有的类都继承自system.Object,如果没有显式地声明一个类的父类,那么这个类便继承自System.Object;另外,子类的修饰符不能比父类的访问修饰符的范围大;C#中只允许类的单一继承;由于子类继承了父类的成员,所以在建立子类对象时,必须先调用父类的构造函数来初始化子类的对象成员。子类的构造函数可以显式或者隐式地调用父类的构造函数,如果省略了子类的构造函数,则使用默原创 2015-11-22 19:14:07 · 545 阅读 · 0 评论 -
C# 结构与类的区别
1、实例在内存中的位置以及内存回收值类型的局部变量都保存在栈中,为引用类型的局部变量都保存在堆中。结构都是值类型,其实例都保存在栈中。对结构类型变量进行赋值,意味着对所有的值创建一个新副本。只有创建引用类型的实例才能触发内存回收,所以创建结构实例不会引发内存回收,除非在结构的构造函数中直接或间接地创建一个引用类型的实例。当把结构作为参数传递给一个方法时,传递前要复制它的一个完成副本,传原创 2015-11-22 16:43:39 · 473 阅读 · 0 评论 -
C# 字段
为了保存类的实例的各种数据信息,C#提供了两种方法----属性和字段。其中,属性实现了良好的数据封装和数据隐藏。字段:表示与对象或类相关联的变量,它使类和结构可以封装数据。字段的定义需要满足类的需求,并选用合适的数据类型;字段在声明时可以不初始化,但在使用时必须初始化。声明语句和初始化语句可以放在不同的放上;字段的修饰符可以是new、public、internal、private、原创 2015-11-22 20:36:02 · 1553 阅读 · 0 评论 -
C# 索引器与属性的区别
索引器跟属性一样,应用目的都是为了以更直观的方式使用类。索引器在语法上比较简单,允许像访问数组那样访问对象,即通过索引方式方便地访问类的数据信息的方法。区别:索引器和属性都可以被访问,但是对索引器的访问是像数组那样访问,但其索引值的类型不受限制;对属性的访问,则像是对字段的访问一样;索引器可以通过索引进行访问,属性则是通过名字进行访问;索引器必须为实例成员,而属性却还可以是静态成员原创 2015-11-23 09:15:09 · 578 阅读 · 0 评论 -
C# 属性
1、属性是对现实世界中实体特征的抽象,它提供了对类和对象性质的访问。2、属性中提供了get和set访问器来对属性值进行读写,避免了直接操作属性值。3、属性可以是只读的或者可读写的。可以像访问或改变公有字段那样访问或改变属性值,并可以利用属性来允许从外部访问私有字段的值。4、属性的修饰符可以是new、public、protected、internal、private、static、vir原创 2015-11-23 08:56:11 · 256 阅读 · 0 评论 -
C# 类成员类型 访问级别
成员常量:代表与类相关的常量值;域:类中的变量;成员方法:复杂执行类中的计算和其他操作;属性:用于定义类中的值,并对它们进行读写;事件:用于说明发生了什么事情;索引指示器:允许像使用数组那样为类添加路径列表;操作符:定义类中特有的操作;构造函数和析构函数:分别用于对类的实例进行初始化和销毁;原创 2015-11-22 16:08:19 · 918 阅读 · 0 评论 -
WPF Thumb
//---------------------------------------------------------------------------------//double canvas1Width,canvas1Height,thumb1Width,thumb1Height;public MainWindow(){ this.InitializeComponent(); //记忆can原创 2015-11-27 09:46:22 · 1423 阅读 · 0 评论