| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1144 人关注过本帖
标题:[原创]制作属性与索引
只看楼主 加入收藏
houyunqing
Rank: 1
等 级:新手上路
帖 子:476
专家分:0
注 册:2005-4-1
收藏
 问题点数:0 回复次数:6 
[原创]制作属性与索引

A.属性 作用:将类的某些部分隐藏起来,同时还可以限制外部对内部成员的存\取权限 另外,还可以在存\取时进行某些额外的行为,或者是进行一些特殊的处理. 事实上,属性是一种非常灵活的却又不具有参数的方法

实现手段:存取元(get{}set{}),再配合一个储存用的变量(某些情况下也可以不配合这个变量),一般是配合私有变量(private)

如果没有get存取元,而有set存取元,那么就是说,这个属性允许你进行写,却不允许你获得它的值(只写属性) 而如果有get{},没有set{},这个属性就是只允许你获得它的值,却不允许你修改它(只读属性) 如果两个都有,那就是可以修改也可以获取值了(可读写属性)

例子: class a { private string str="3216549879876548";//下面的几个属性都是靠这个私有变量完成存取的 public string Str//可以写也可以读的属性,因为它有get,也有set { get{return str;} //这个属性使用类内的str(一个私有的string成员)进行存储,在取得Str的值时,就返回str的值, //要注意,返回的类型必须与属性的类型相同,return 只能出现在get存取元中 set{str = value;}//value是一个关键字,专门用于set存取元中的, //value的类型取决于属性的类型(永远与属性的类型相同),在这个地方,value就是一个string } public string Stri//只读属性,因为它只有get { get{return str;} } public string St//只写属性,因为它只有set { set{str = value+"opq?";//可以在存取动作时进行一些额外的行为,还可以调用方法等等,非常好用! } } } class main { public static void Main() { a a1 = new a(); Console.WriteLine(a1.Str);//打出了str的值 Console.WriteLine(a1.Stri);//打出了str的值,因为Stri这个属性是允许读的,所以不会出错 a1.Str="sssss";//Str是可以写的属性,所以这句代码也不会出问题 a1.Stri = "akljdfkaf";//Stri没有set存取元,不允许写,这句代码无法编译 Console.WriteLine(a1.St);//St属性只允许写,不允许读,这句代码无法编译 a1.St="asdfasdf";//OK!St属性允许写~ } }

注意: 属性可以是各种各样类型的,随便你定义:修饰符 属性类型 属性名称{这个里面可以包含有存取元,也就是get{}和set{}} get{}里面可以有return,但是set{}里面不能有,同样,value只可存在与set中(value与属性的类型相同) 同一个方法中不可以有同名的属性! 属性可以使用virtual,abstract,override修饰符 属性可以为static

B.索引 作用:具有属性的大多数特点,另外,存取更灵活,数组的"[]"和集合的"[]"都是索引

例子: class b { string[]s=new string[]{"a","b","c","d","e","f","g","h"}; public string this[int index]//注意索引的声明方法: //修饰符 类型 this[这个里面声明存取时所用的参数,参数不限制为一个,参数的类型可以不同] { get { return s[index];//如果index超出s的范围,将会导致异常 } set { s[index]=value;//如果index超出s的范围,将会导致异常 } } } public int this[string index]//这个地方采用string作为索引参数,返回一个int { get { return s.IndexOf(index);//这个索引形同与IndexOf(); } }

class main { public static void Main() { b b1 = new b(); Console.WriteLine(b1[0]);//OK! Console.WriteLine(b1[99]);//抛出异常,因为99这个索引超出了范围 Console.WriteLine(b1["a"]);//输出0 } } 注意: 一个类可以有多个索引,但是这些索引不能有相同的索引参数 还有,属性可以为static,而索引不可以 索引可以有多个参数(至少一个),参数的类型可以不同,索引的参数不可以为out(传出参数)或者ref(传参考参数) 虽然属性和索引都是方法,但是不能声明为void

[此贴子已经被作者于2005-7-3 13:17:56编辑过]

搜索更多相关主题的帖子: 索引 属性 制作 
2005-07-03 12:55
houyunqing
Rank: 1
等 级:新手上路
帖 子:476
专家分:0
注 册:2005-4-1
收藏
得分:0 
注意一点,一个类可以有多个索引,但是这些索引不能有相同的索引参数
属性可以使用virtual,abstract,override修饰符

寻求挑战,追求完美 Oh,my god!
2005-07-03 12:57
houyunqing
Rank: 1
等 级:新手上路
帖 子:476
专家分:0
注 册:2005-4-1
收藏
得分:0 
还有,属性可以为static,而索引不可以,索引的参数不可以为out(传出参数)或者ref(传参考参数)

寻求挑战,追求完美 Oh,my god!
2005-07-03 12:59
幻风幻云
Rank: 1
等 级:新手上路
帖 子:762
专家分:0
注 册:2005-1-14
收藏
得分:0 
收藏!有空再看

2005-07-05 21:57
♂星里有树♂
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2005-7-7
收藏
得分:0 
后面都是设定的属性


就这样?
2005-07-07 14:43
houyunqing
Rank: 1
等 级:新手上路
帖 子:476
专家分:0
注 册:2005-4-1
收藏
得分:0 
可能是因为开学了吧,论坛最近冷了一点,我把精品顶上来,朋友们再看

寻求挑战,追求完美 Oh,my god!
2005-08-27 21:15
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 
好、好,我也不太懂。
2005-08-27 21:20
快速回复:[原创]制作属性与索引
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020306 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved