分类 CSharp 下的文章

宇托 CSharp 0 条

在C#中,扩展方法算是一种比较不错的语法糖。它可以让我们能够向现有类型(包括值类型、引用类型以及接口)添加方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用。在定义和使用扩展方法时,有以下几个需要注意的地方:包含扩展方法的类必须是静态类。该类必须在调用的地方有被访问权限。因为静态类里只能定义静态方法,自然而然扩展方法也必须是静态的。扩展方法的访问权...

宇托 CSharp 0 条

在C#中,可以定义两种类型转换:隐式转换(cs#implicit)和显示转换(cs#explicit)。这两种类型转换的定义方法如下代码:// 隐式转换定义 public static implicit 目标类型(原类型 变量参数) { return 目标类型结果; } // 显示转换定义 public static explicit 目标类型(原类型 变量参数) { return 目标类型结果; }比如:class ...

宇托 CSharp 0 条

在C#中,和C++语言一样,也支持运算符重载。我们可以重载一元运算符,二元运算符,以及比较比较运算符。如下表运算符可重载性+, -, !, ~, ++, --, true, false可以重载这些一元运算符。+, -, *, /, %, &, \, ^, <<, >>可以重载这些二元运算符。==, !=, <, >, <=, >=可以重载这些比较运算符(但请参见下面的说明)。&&, ...

宇托 CSharp 0 条

在C#中,索引器可以看成是属性的一种特殊形式。它和属性一样,可以定义cs#get和cs#set。定义好索引器之后,它可以使类像数组一样访问,但它和数组还是有区别的。索引器和属性的区别索引器以函数签名方式cs#this来标识,而属性采用名称来标识,名称可以任意索引器可以重载,而属性不能重载。只要索引器的函数签名不同,就可以定义多个索引器。索引器不能声明为静态(cs#static),而属性可以有静态属性。索引器永远属于实例成员。索引器...

宇托 CSharp, Lambda 0 条

在C#中,匿名方法和Lambda方法,应该说是差不多的概念,都是做为内部函数使用的,虽然两者写法上有很大的区别。匿名方法和Lambda方法做为同一概念,要注意以下几点:两者都不能访问定义方法中的cs#ref和cs#out参数两者都可以访问外部方法中的本地变量,并能修改外部方法中的值两者都可以访问外部类作用域的实例变量(或者静态变量)两者中的本地变量不能与外部方法中的本地变量重名两者中的本地变量可以与外部类作用域的实例变量重名另外,...

宇托 CSharp 0 条

在C#中,cs#event关键字应该算是一个语法糖的关键字吧。也就是说,不用cs#event关键字也能实现一样的功能,但使用cs#event关键字之后,代码量和可读性要提高很多。在使用cs#event关键字的地方,用cs#delegate委托的方法也同样能实现,但在公开性的设置方法也需要一些代码。基本上来说,cs#event关键字和cs#delegate委托方法实现的主要区别就在于公开性。要注意的是用cs#event关键字申明的字...

宇托 CSharp 0 条

泛型参数在强类型编程语言中,应该算一个很不错的语法。至于泛型参数的约束,在Java和C#里都有。在C#中,用cs#where来约束泛型参数。能使用的大概有以下几种类型:cs#where T : struct:泛型参数cs#<T>必须是值类型(cs#struct或者cs#enum)cs#where T : class:泛型参数cs#<T>必须是引用类型cs#where T : new():泛型参数cs#<...

宇托 CSharp 0 条

在C#中,cs#is和cs#as主要用于类型的判断和赋值。is关键字主要用于类型判断cs#is关键字是用来检查一个变量或值是否是类或者接口的实例。是则返回cs#true,不是返回cs#false。如下代码:Object[] values = new Object[] { "", 1, 1.5 }; for (int i = 0; i < values.Length; i++) { if (valu...

宇托 CSharp 0 条

之前总是不太理解C#中接口和抽象类的区别和相同点,在网上找了找,然后看了书,大体理解了。接口与抽象类的相同点两者都不能实例化。两者都可以包含未实现的方法和属性声明。两者都派生类必须实现未实现的方法和属性。接口与抽象类的具体区别接口可以定义属性,方法,事件,索引器,但不能定义字段(包括常量,静态字段,字段);而抽象类的可以,要注意的是静态字段不可定义成cs#abstract和cs#virtual的。接口只能定义属性,方法,事件,索引...

宇托 CSharp 0 条

cs#sealed关键字在C#中主要用于以下两个方面:在类声明中使用sealed可指定该类为密封类,防止其它类继承此类。在方法声明中使用sealed可指定该方法为密封方法,防止子类覆盖此方法。下面来分别介绍一下密封类和密封方法。密封类密封类无法被其它类继承,如果试图用一个密封类来做为其它类的基类,会出现编译错误。正因为如此,抽象类不能申明为密封类,因为抽象类总是希望被继承的。在C#中,字符串(cs#System.String)是一...

宇托 CSharp 0 条

C#中的访问修饰符关键字有四个:cs#public、cs#protected、cs#internal、cs#private。如果用访问级别来区别可以分为五个级别:cs#public、cs#protected internal、cs#protected、cs#internal、cs#private。访问修饰符能用于类,接口,结构,枚举,委托,字段,属性以及函数。在没有任何访问修饰符时,默认为cs#internal。其大概说明如下表:...

宇托 CSharp, static 0 条

在C#中,static这个应该是用得比较多的。它能用于以下这些地方:用于类的申明。可以申明类为静态类,静态类只能有静态构造函数、静态函数、静态字段、静态属性和常量。用于构造函数的申明,申明为静态构造函数。静态构造函数不能有参数和访问修饰符(如:cs#public、cs#private )。用于函数的申明,申明为静态函数。用于字段的申明,申明为静态字段。用于字段的属性,申明为静态属性。现在分别说说静态类,静态构造函数,静态函数,静态...

宇托 CSharp, ValueType, ReferenceType 0 条

在C#中,所有的东西都是对象。但在对象类型中,又分为值类型和引用类型。两者的主要区别是:值类型的内存空间分配在栈上;而引用类型的内存空间分配在堆上。栈的内存分配是自动释放;而堆的内存是由GC(垃圾回收)来释放值类型存取速度快,引用类型存取速度慢。类型表示实际数据,引用类型表示指向存储在内存堆中的数据的指针或引用值类型继承自System.ValueType(ValueType是继承自System.Object的),引用类型继承自Sy...

宇托 CSharp 2 条

C#中的默认参数相对Java来说是一个很不错的语法。当然可变参数cs#params也不错,Java中也有,其语法是java#...。那么两者在使用上有哪些限制和注意点呢?先说说默认参数默认参数必须放在所有必须参数之后。因为默认参数的设值方式,所以默认参数不能用cs#out和cs#ref来修饰。默认参数在调用时如果能匹配多个函数,会优先调用默认完全配置的那个函数,如果都是不完全匹配,会编译出错。可变参数可变参数必须放到所有参数之后。...

宇托 CSharp 0 条

在C#中,我经常用到cs#ref和cs#out这两个关键字,但对其区别也还不是很清楚。基本上来说,C#函数参数的传递方法为分两种,一种转值,另一种是传址。对于不加任何修饰的函数参数来说,它都是传值的。传值又分为两种,一种是传对象值,另一种是传地址值。对于值类型cs#System.ValueType(包括这两种cs#struct和cs#enum,C#中的c#int、c#double等基本类型都是cs#struct)来说是传对象值,对...