C#相关
2013-10-08 22:55
120 查看
1.索引器
索引器允许类或结构的实例按照与数组相同的方式进行索引。索引器类似于属性,不同之处在于它们的访问器采用参数。它可以像数组那样对对象使用下标。它提供了通过索引方式方便地访问类的数据信息的方法。
要声明类或结构的索引器,使用this关键字。
2.静态构造函数的使用方法
这道题比较有意思,先看下代码及运行的结果:
View Code
6.ref和out的区别:
索引器允许类或结构的实例按照与数组相同的方式进行索引。索引器类似于属性,不同之处在于它们的访问器采用参数。它可以像数组那样对对象使用下标。它提供了通过索引方式方便地访问类的数据信息的方法。
要声明类或结构的索引器,使用this关键字。
class SampleCollection<T> { private T[] arr = new T[100]; public T this[int i] { get { return arr[i]; } set { arr[i] = value; } } } class Program { static void Main(string[] args) { //SampleCollection<int> i=new SampleCollection<int>(); //i[0] = 1; // Console.WriteLine(i[0]); SampleCollection<string> s = new SampleCollection<string>(); s[0] = "HELLO"; Console.WriteLine(s[0]); Console.ReadKey(); } }
2.静态构造函数的使用方法
这道题比较有意思,先看下代码及运行的结果:
class Class1 { public static int Count = 0; static Class1() { Count++; } public Class1() { Count++; } } class Program { static void Main(string[] args) { Class1 o1 = new Class1(); Class1 o2 = new Class1(); Console.WriteLine(Class1.Count); Console.ReadKey(); } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections; namespace JiDan { public class RefPoint { public int x; public RefPoint(int x) { this.x = x; } } class Program { static void Main(string[] args) { bool result; RefPoint rPoint1 = new RefPoint(1); RefPoint rPoint2 = new RefPoint(1); result = (rPoint1 == rPoint2); Console.WriteLine(result); // 返回 false; result = rPoint1.Equals(rPoint2);//对于引用类型,即使类型的实例(对象)包含的值相等,如果变量指向的是不同的对象,那么也不相等。这个很关键 Console.WriteLine(result); // #2 返回false result = (rPoint1.x).Equals(rPoint2.x);//这样就会相等了 Console.WriteLine(result); //true object m1 = 1; object m2 = 1; result = m1.Equals(m2);//true,更清晰地理解是"=="用于比较引用是否相等,也就是是否指向同一个对象,如果指向的是同一个对象,那么Equal肯定相等 //Equal用于值类型是否相等,也就是堆栈上的值。。只是初步的,更深地要对Equal原型方法熟悉。。 Console.WriteLine(result); Console.ReadKey(); } } }
View Code
6.ref和out的区别:
最近在许多论坛上看到关于了ref和out的区别,发现解释的都不非常理想。 我想抄写点官方的解释,然后再来我自己的解释 //如下 方法参数上的 out 方法参数关键字使方法引用传递到方法的同一个变量。当控制传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。 当希望方法返回多个值时,声明 out 方法非常有用。使用 out 参数的方法仍然可以返回一个值。一个方法可以有一个以上的 out 参数。 若要使用 out 参数,必须将参数作为 out 参数显式传递到方法。out 参数的值不会传递到 out 参数。 不必初始化作为 out 参数传递的变量。然而,必须在方法返回之前为 out 参数赋值。 属性不是变量,不能作为 out 参数传递。 方法参数上的 ref 方法参数关键字使方法引用传递到方法的同一个变量。当控制传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。 若要使用 ref 参数,必须将参数作为 ref 参数显式传递到方法。ref 参数的值被传递到 ref 参数。 传递到 ref 参数的参数必须最先初始化。将此方法与 out 参数相比,后者的参数在传递到 out 参数之前不必显式初始化。 属性不是变量,不能作为 ref 参数传递。 //上面的理解起来非常不好理解。下面我说说我自己的看法。 首先:两者都是按地址传递的,使用后都将改变原来的数值。很多人在论坛上解释说out是按数值传递,是错误的。简单的测试后可以知道out使用也能改变数值的,所以肯定是按照地址传递的。 其次:rel可以把参数的数值传递进函数,但是out是要把参数清空,就是说你无法把一个数值从out传递进去的,out进去后,参数的数值为空,所以你必须初始化一次。这个就是两个的区别,或者说就像有的网友说的,rel是有进有出,out是只出不进。经典!!!
相关文章推荐
- C# 关于OPC数据处理相关代码优化处理
- C#杀掉程序相关进程
- C# 利用WinRAR (加密)压缩及解压缩 相关文件夹及文件
- C#:什么是委托和事件及其相关(转)
- C# System.Net.NetworkInformation 命名空间学习之NetworkInterface 类获取IP,DNS,Gateway,Mask, MAC等网络相关信息
- 使用C#正则表达式匹配相关字符串
- C# 键值对类相关
- C# 文件操作相关
- c#相关
- C#IO 文件读取笔记一(File类和Directory类相关属性,FileInfo类和DirectoryInfo类)
- C# 模板编程相关学习总结
- [C#][SAMPLE][CODE][Control]RadioBox、CheckBox和Validating事件的相关处理
- c# 创建指定大小的空字符填充的文本文件 在指定位置读写相关内容
- C#开发微信门户及应用(13)-使用地理位置扩展相关应用
- C# 获取计算机 相关信息
- C#中生成中文样式的日期及相关DateTime技巧
- 开源Math.NET基础数学类库使用(11)C#计算相关系数
- C++转向C# 的疑惑:析构函数及相关
- C#ListView控件的相关用法
- 通过C#实现集合类纵览.NET Collections及相关技术