C#学习日记27----属性

属性可以是 类(class)、结构(struct)、接口(interface)的命名成员,他提供灵活的机制来读取、写入、或计算私有(private)字段的值,属性可以看作是公共(public)字段的成员,但他实际上是定义了一个“访问器”的特殊方法让私有字段的值可以被读写或操作。

说的形象点吧,比如我们定义一个person类里面有一个私有成员 private string name; 在外界我们实例化一个person对象per,要求为per起个名字,并且输出这个名字,也就是为per.name赋一个值,然后输出??经过前面的学习我们知道,类中的private修饰的变量外界对象是访问不到的,(无法直接per.name="HC666"来搞定^_^)
因此只能在类里面定义一个public修饰的setname与getname方法将“HC666”作为参数来进行写入与输出,这样有点繁琐,这个时候“属性”就该登场了,我们为name定义一个读写属性Name就可以弥补这个不足。

“访问器”

属性的访问器包含有获取或者设置属性的可执行语句,访问器的声明可包含一个get访问器(表示只读),或者一个set访问器(表示只写),或者两个同时包含(表示可读可写)。(上面的例子中我们使用get访问器输出name,使用set访问器写入)

定义属性:

上面的例子中我们可以为name 定义一个读写属性Name,使用外界对象能够访问的public修饰符

private string name;     //声明name变量

public string Name    
//声明变量的属性,读写

{

get { return name;  }  
//定义读访问器,其实就是一个方法

set { name = value;  } 
//定义写访问器,set 方法有一个隐含的参数value

}

再定义一个只读属性吧,比如我们的年龄 age 是固定的只读

private uint age=10; 
//声明变量 age

private string Age    
//声明变量的属性,只读

{

get { return age;  }  
//读访问器

}

属性的实例:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Test1
{
    class person
    {  //定义变量name,并且为name定义一个读写属性
        private string name;
        //定义属性
        public string Name
        {//访问器
            get { return name; }
            set { name = value; } //set自带一个value参数
        }
        //定义变量age,并且为age定义一个只读属性
        private uint age=10;
        public uint Age
        {
            get { return age; }
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            person per = new person();
            per.Name = "HC666";  //执行写入属性
            Console.WriteLine("我的名字叫:{0}\t今年 {1} 岁了",per.Name,per.Age); //读属性
        }
    }
}

结果:

抽象属性:

前面也说了,属性可以使类、结构、接口的成员,自然也可以是抽象类的抽象属性了,抽象属性同抽象方法一样在派生类中被实现。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Test1
{//定义一个person抽象类
    abstract class person
    {//定义抽象属性
        public abstract string Name
        {//读写
            get;
            set;
        }
        public abstract uint Age
        {//只读
            get;
        }

    }
    //定义派生类
    class student : person
    {
        private string name;
        private uint age=10;
        //实现抽象属性
        public override string Name
        {
            get
            {
                return name ;
            }
            set
            {
                name=value;
            }
        }
        public override uint Age
        {
            get { return age; }
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            student stu = new student();
            stu.Name = "HC666";  //执行写入属性
            Console.WriteLine("我的名字叫:{0}\t今年 {1} 岁了",stu.Name,stu.Age); //读属性
        }
    }
}

结果与上一个例子是一样的。

感谢对HC666的支持,欢迎您的建议与评论^_^……

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-03 21:13:28

C#学习日记27----属性的相关文章

学习日记-----各种问题

用.net做B/S结构的系统,您是用几层结构来开发,每一层之间的关系以及为什么要这样分层? 答: 从下至上分别为:数据访问层.业务逻辑层(又或成为领域层).表示层 数据访问层:有时候也称为是持久层,其功能主要是负责数据库的访问 业务逻辑层:是整个系统的核心,它与这个系统的业务(领域)有关 表示层:是系统的UI部分,负责使用者与整个系统的交互.  优点:  分工明确,条理清晰,易于调试,而且具有可扩展性. 缺点:  增加成本. 分层式结构究竟其优势何在? 1.开发人员可以只关注整个结构中的其中某一

学习日记

五一耍了三天,自己的计划有泡汤,那种制止力哪里去了,不过我认真起来还有有废寝忘食的时候,不过希望这种时候多一点,回家妈妈告诉我,她给老师打电话了的,老师说了我的一些情况,不过我没有老师说的那么好,学习在班上算中等.我觉得还算不上吧!任重而道远吧. Java中有个比较重要的类Properties(Java.util.Properties),主要用于读取Java的配置文件,各种语言都有自己所支持的配置文件,配置文件中很多变量是经常改变的,这样做也是为了方便用户,让用户能够脱离程序本身去修改相关的变量

学习日记之大话设计模式和Effective C++大结局

第一次潜心学习一个月时间,看完了<大话设计模式>和<Effective C++>两本书,两本书的前半部分都比较容易,但是后期的部分,比如:C++的内存,异常和模板的知识就很难理解了.也许和自己很少用异常处理和模板的关系吧.自己坚持了一个月,无论如何,这两本书给我带来了很多新的知识,发现了自己的不足.接下来打算继续看<C++ Templates>这本书,希望能弥补自己在模板编程方便的不足和为以后研究STL和Boost打下坚实的基础.废话少说,言归正传.下面说一下两本书的最

WCF学习日记

图书馆借阅了<WCF高级编程>,从6.11开始学习wcf,希望尽快熟悉原理和编程模型以及常用编程方法. WCF是一个平台,也是一个框架,从Net.3.0 就在Net framework(无需安装) .WCF将服务以SOA架构对外使用.SOA的宗旨就是让应用程序成为一个接口可以供其余程序使用.比如图书订单管理系统,订单履约系统,ship系统,会计系统,以及其它系统,每个都是一个独立的系统,但是彼此系统应该作为接口供别人使用,这样即使扩展了服务或者改善了服务也不会影响原先的体系架构和业务规则. W

informatica 学习日记整理

1. INFORMATICA CLIENT的使用 1.1 Repository Manager 的使用 1.1.1 创建Repository. 前提: a. 在ODBC数据源管理器中新建一个数据源连接至你要创建Repository的数据库(例:jzjxdev) b. 要在你要连接的数据库中新建一个用户(例:name: ETL password: ETL) 现在你可以创建一个Repository了.选择Repository – Create Repository,输入Repository Name

canvas学习日记一

由于工作的需求,促进我学习html5 canvas技术,canvas是html5最强大的元素之一.使用它可以在浏览器中做一番奇妙的事情.大家或多或少都听过canvas的强大用处,我这里就不再赘述了. canvas的强大功能是通过canvas的context对象表现出来的,该环境变量是可以从canvas元素身上获取. 下面先看一个canvas的例子方便讲解:在canvas上显示一个字符串,该字符串大致与canvas水平垂直居中.代码如下: <!DOCTYPE HTML> <html lan

【转】android学习日记01--综述

转自:http://www.cnblogs.com/aiguozhe/p/3541941.html 一.总体框架 先上一张google提供官方的Android框架图: Android系统架构由5部分组成,分别是:Linux Kernel.Android Runtime.Libraries.Application Framework.Applications(E文不好就不翻译了,其实这也是简单的计算机E文啦)下面分别讲述每部分的主要作用: 1.Linux Kernel Android基于Linux

Android Gradle编译学习日记之二(使用 Gradle 编译 Eclipse,引入依赖资源以及迁移 Android Studio)

大家如果喜欢我的博客,请关注一下我的微博,请点击这里(http://weibo.com/kifile),谢谢 转载请标明出处(http://blog.csdn.net/kifile),再次感谢 Android Gradle编译学习日记(基于 Android Studio 1.0): Android Gradle编译学习日记之一(搭建 Gradle 环境以及编译 Android 应用) 在上一篇文章中,我简单介绍了一个 Gradle 环境变量的搭建,以及如何使用 Gradle 编译 Android

JQUERY学习日记 attr()

1.attr(attribute) $("img").attr("width"); //取img标签中width属性值 2.attr(attribute,value) $("#abc").attr("placeholder", ""); //将abc对象的placeholder赋值为空 3.attr(attribute,function(){}) $("img").attr("

学习日记 | 5.18 [Python3] Python3基础与面向对象

注:这是一系列基于实验楼网络培训的python学习日记,内容零散,只是便于我自己回顾,有需要请了解www.shiyanlou.com. 1. Github相关 首先是复习github相关操作: 1.1 完成创建账号和仓库 登陆github.com,创建new repository,自动初始化README.md. 1.2 使用ssh-keygen生成公私钥 建议密钥保存在默认位置中:终端输入ssh-keygen,默认保存密钥位置为/home/shiyanlou/.ssh/id_rsa,一路回车.然