第三课 字段,属性和方法的使用.doc

上传人:hs****ma 文档编号:542134884 上传时间:2023-02-26 格式:DOC 页数:21 大小:64.50KB
返回 下载 相关 举报
第三课 字段,属性和方法的使用.doc_第1页
第1页 / 共21页
第三课 字段,属性和方法的使用.doc_第2页
第2页 / 共21页
第三课 字段,属性和方法的使用.doc_第3页
第3页 / 共21页
第三课 字段,属性和方法的使用.doc_第4页
第4页 / 共21页
第三课 字段,属性和方法的使用.doc_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《第三课 字段,属性和方法的使用.doc》由会员分享,可在线阅读,更多相关《第三课 字段,属性和方法的使用.doc(21页珍藏版)》请在金锄头文库上搜索。

1、第三课 字段,属性和方法的使用字段.是指数据库中某一列.比如某数据表中有ID.NAME.那么这就是两个字段.而属性.是指在实例类中相应的属性.针对上述字段.该类中就声明两个属性.一个ID.一个NAME.封装起来是为了方便使用.体现面向对象.层次清楚.如:某页面要显示某用户的信息.在该页面需要操作的数据其实都是该实例类中的属性.而不用再对数组.dataset.datatable等进行操作.c# 属性 属性:get /读属性代码 set /写属性代码 public class Personprivate string name;public string Name getreturn name;

2、set name=value;属性可以忽略get或set访问器,但是不能两个都忽略set访问器包含一个隐藏的参数value,该参数包含从客户代码传送过来的值公共属性及其底层类型最好使用相同的名称,因为它们之间的联系将很清晰字段使用camelCase(xxXxx),如dateOfBirth,而属性使用PacalCase(XxXxx),如DateOfirth.一些开发人员喜欢在字段的开头使用下划线,如_Name,属性也应使用名词来命名c#通过属性特性读取和写入字段,而不直接读取和写入,以此来提供对类中字段的保护.属性按可以访问的类型分为三种不同的类型:一.读/写属性 读/写属性是一个具有get()

3、和set()访问器的属性. 语法: 访问修饰符 数据类型 属性 get ;set ;二.只读属性 仅具有get()访问器属性称为只读属性.语法: 访问修饰符 数据类型 属性名 get ;三.只写属性 仅具有set()访问器属性称为只写属性,不推荐使用只写属性.语法: 访问修饰符 数据类型 属性名 set ;示例:using System;namespace Example1 class Student #region/*属性*/ / / 姓名 / private string name; public string Name get return name; set if(value.leng

4、th40) Console.WriteLine(学生姓名长度不能小于4个!); return; name=value; #region static void Main(string args) Student student=new Student(); student.Name=Console.ReadLine(); 属性(property)充分体现了对象的封装性:不直接操作类的数据内容,而是通过访问器进行访问,即借助于get和set对属性的值进行读写;另一方面还可以对数据的访问属性进行控制(当然也可以通过对普通域加readonly关键字来实现。设计原则:属性封装了对域的操作。把要访问的域

5、设为private,通过属性中的get和set操作对域进行设置或访问。不能把属性作为引用类型或输出参数来进行传递。get方法没有参数;set方法有一个隐含的参数value。除了使用了abstract修饰符的抽象属性,每个访问器的执行体中只有分号“;”外,其他的所有属性的get访问器都通过return来读取属性的值,set访问器都通过value来设置属性的值。采用间接方式来访问对象的属性(间接调用get、set方法):对象.属性 值(调用set),变量 对象.属性(调用get)。在属性的访问声明中:只有set访问器,表明该属性是只写的。只有get访问器,表明该属性是只读的。既有set访问器,又有

6、get访问器,表明该属性是可读可写的。private string s_filename; public string Filename get return s_filename;/getset if(s_filename!=value) s_filename = value;/if/set/Filenamel 属性和字段的比较: ? 属性不能使用ref/out 型参数 ? 属性使用前必须赋值属性使用前必须赋值,例如:Time lunch;lunch.Hour = 12;/错误,lunch没有初始化属性vs.函数l 相似点? 都包含执行代码 ? 都可以有访问修饰符? 都可以有virtual,

7、 abstract, override 修饰符? 都可以用在接口中l 不同点 ? 属性只能拥有get/set 语句 ? 属性不可以是void 型? 属性不能使用参数? 属性不能使用 参数 ? 属性不能使用括号public int Hour . set if (value 24) throw new ArgumentException(value); hour = value; 类的属性称为智能字段,类的索引器称为智能数组。由于类本身作数组使用,所以用this作索引器的名称,索引器有索引参数值。例:using System;using System.Collections; class MyLi

8、stBox protected ArrayList data = new ArrayList(); public object thisint idx /this作索引器名称,idx是索引参数 get if (idx -1 & idx -1 & idx 1) /这里校验 property1= value ; else property1=1; /实例属性,可读可写 public int StrCount get return m_strCount; set if (valuem_strCount) strArray = new stringvalue; for (int i=0;ivalue;

9、i+) strArrayi = String.Format(String No.0,i); m_strCount = value; private static string m_strName = MyClass; /一个静态属性,只读 public static string ClassName get return m_strName; class Bprivate A _a;public A item get if(_a=null) _a=new A(); return _a; set_a=value; C# 泛型方法在相同的类型推断规则也适用于静态方法以及实例方法。编译器能够根据传入

10、的方法参数推断类型参数;它无法仅从约束或返回值推断类型参数。因此,类型推断不适用于没有参数的方法。类型推断在编译时、编译器尝试解析任何重载方法签名之前进行。编译器向共享相同名称的所有泛型方法应用类型推断逻辑。在重载解析步骤中,编译器仅包括类型推断取得成功的那些泛型方法。 在泛型类中,非泛型方法可以访问类级别类型参数,如下所示: C# 泛型方法代码class SampleClass void Swap(ref T lhs, ref T rhs) 如果定义的泛型方法接受与包含类相同的类型参数,编译器将生成警告 CS0693,因为在方法范围内,为内部 T 提供的参数将隐藏为外部 T 提供的参数。除了类初始化时提供的类型参数之外,如果需要灵活调用具有类型参数的泛型类方法,请考虑为方法的类型参数提供其他标识符,如下面示例中的 GenericList2 所示。 C# 泛型方法代码class GenericList / CS0693

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号