C#set和get方法

    xiaoxiao2026-10-08  1

    用属性来实现封装 属性是c#引入的一种语言成分,只有很少的语言支持属性。通过对属性的读和写来保护类中的域。第一种方法体身也是一种好的方式,但用属性来实现封装会更方便。

    C#属性的声明

    C#的属性采用如下方式进行声明:

    attributes proterty-modifiers type member-name {accessor-declarations}

    属性的修饰符property-modifiers有:

    ●new

    ●public

    ●protected

    ●internal

    ●private

    ●static

    ●virtual

    ●sealed

    ●override

    ●abstract

    以上修饰符中,static,virtual,override和abstract修饰符不能同时使用。

    属性的访问声明accessor-declaration必须用一对“{”和“}”大括号括起来,在其中给出对属性的值进行读写的操作说明。

    虽然属性和域的语法比较类似,但不能把属性当做变量那样使用,也不能把属性作为引用型参数或输出参数来进行传递。

     

    属性的代码形式

    属性:get { //读属性代码 } set { //写属性代码 }

    例如

    public class Person { private string name; public string Name { get{return name;} set{ name=value;} } }

    说明

    1、在属性的访问声明中:

    ●只有set访问器,表明属性的值只能进行设置而不能读出。 ●只有get访问器,表明属性的值是只读的,不能改写。 ●同时具有set访问器和get访问器,表明属性的值的读写都是允许的。

    2、属性可以忽略get或set访问器,但是不能两个都忽略. set访问器包含一个隐藏的参数value,该参数包含从客户代码传送过来的值. 3、字段使用camelCase(xxXxx),如dateOfBirth,而属性使用PacalCase(XxXxx),如DateOfBirth.一些开发人员喜欢在字段的开头使用下划线,如_Name,属性也应使用名词来命名. 4、c#通过属性特性读取和写入字段,而不直接读取和写入,以此来提供对类中字段的保护.

    属性按可以访问的类型分为三种不同的类型:

    一.读/写属性

    读/写属性是一个具有get()和set()访问器的属性.

    语法: [访问修饰符] 数据类型 属性 { get{ }; set{ }; }

    二.只读属性

    仅具有get()访问器属性称为只读属性.

    语法: [访问修饰符] 数据类型 属性名 { get{ }; }

    三.只写属性

    仅具有set()访问器属性称为只写属性,不推荐使用只写属性.

    语法: [访问修饰符] 数据类型 属性名 { set{ }; }

    属性的作用和注意事项

    -充分体现了对象的封装性:不直接操作类的数据内容,而是通过访问器进行访问,即借助于get和set对属性的值进行读写;另一方面还可以对数据的访问属性进行控制(当然也可以通过对普通域加readonly关键字来实现。 -设计原则:属性封装了对域的操作。把要访问的域设为private,通过属性中的get和set操作对域进行设置或访问。

    -不能把属性作为引用类型或输出参数来进行传递。 -get方法没有参数;set方法有一个隐含的参数value。除了使用了abstract修饰符的抽象属性,每个访问器的执行体中只有分号“;”外,其他的所有属性的get访问器都通过return来读取属性的值,set访问器都通过value来设置属性的值。 -采用间接方式来访问对象的属性(间接调用get、set方法):对象.属性 = 值(调用set),变量 = 对象.属性(调用get)。 -尽可能的使用属性(property),而不是数据成员(field)。

    属性与函数比较

    相似点

    都包含执行代码

    都可以有访问修饰符

    都可以有virtual, abstract, override 修饰符

    都可以用在接口中

    不同点

    属性只能拥有get/set 语句

    属性不可以是void 型

    属性不能使用参数

    属性不能使用[ ] 参数

    属性不能使用括号

    }

    //内容来源于网络

    转载请注明原文地址: https://ju.6miu.com/read-1312768.html
    最新回复(0)