1.interface

对于接口,一把我在项目中会这样使用:

        interface IStudent
{
string Name();
string GoSchool();
}

但是呢,这样有个不好的地方就是Name明显的是要获得姓名的,方法好像有点大,某一天我在书中看到可以变化成这样:

        interface IStudent
{
string Name { get; }
string GoSchool();
} public class Student : IStudent
{
public string Name
{
get { return "许多鱼儿"; }
} public string GoSchool()
{
return "Go School";
}
}

这样代码的可读性是不是更高呢?

2.new

一般new关键字的使用场景是,父类的属性或方法,存在同名,但是不提供重写功能,所以子类可以用new关键字,覆盖父类方法,达到在外部访问该属性或方法时,调用的是子类的属性或方法的目的。

        static void Main(string[] args)
{
TestOne tOne = new TestOne();
TestTwo tTwo = new TestTwo();
Console.WriteLine(tOne.Property);
Console.WriteLine(tTwo.Property);
//print 2 1
} public class Base
{
public string Property = "1";
} public class TestOne : Base
{
public new string Property = "2";
} public class TestTwo : Base
{
private new string Property = "3";
}

注意:TestTwo中使用private的目的是想屏蔽外部对父类Property的访问,不过好像没达到这个目的?有陷阱

3.属性访问器(get,set访问器)

        class Student
{
private string _name; public string Name
{
get { return _name; }
set { _name = value; }
} }

这是一个最基本的属性(公开的,外部可访问的称为属性)访问器,外部可读可字段(内部的,外部访问不到的成为字段)_name的值,但是初学时会有疑惑value是从哪里来的呢?大家看看下面的代码,我们用方法来实现get,set访问器,比如:

            public string Name()
{
return _name;
} public void Name(string value)
{
_name = value;
}

好的,虽然实现了,但是和属性访问器一对比,明显的有点多余,你说是不?所以属性访问器可以这个方法来理解,get访问器相当于有返回值的Name()方法,set访问器相当于带参数value的Name()方法,所以理论上属性访问器就是一个封装过了的方法,什么,你不信?

让你信1:

       interface IStudent
{
//接口中不能有字段,只能有方法
//string Name;编译不通过
string Name { get; }
string GoSchool();
}

让你信2:

        public class Student : IStudent
{
//咱们悄悄的把IStudent的修饰符改一下,^_^
public virtual string Name
{
get { return "许多鱼儿"; }
} public string GoSchool()
{
return "Go School";
}
} public class HighStudent : Student
{
public override string Name
{
get
{
return base.Name;
}
}
}

什么,你还不信?自己蹲墙角画圈去 

c#接口和new关键字和属性访问器基础收获的更多相关文章

  1. 14.C#属性访问器、命名空间、pragma指令(七章7.3-7.5)

    看到一些零星的知识片,今天就用自己的理解说明下,也是因为太简单了,一下就过的,也是我们日常开发中常用.留下一个脚印,当书不在手上的,也能翻出来看看.说下属性访问器.命名空间和pragma指令. 属性访 ...

  2. C# set get 函数 属性访问器

    属性访问器  拿东西就是Get,放东西就是Setprivate string namepublic String Name{set{name = value;}get{return name;}}ge ...

  3. C#属性访问器

    属性的访问器包含与获取或设置属性有关的可执行语句.访问器声明可以包含 get 访问器或 set 访问器,或者两者均包含.声明采用下列形式之一:get {}set {} get 访问器get 访问器体与 ...

  4. 小鱼提问2 属性访问器中get,set再用public修饰行吗,private呢?

    /// <summary> /// 是否有一个用户正在连接服务器中 /// </summary> public bool IsConnectting { get { retur ...

  5. ruby里面的属性访问器

    和ios的@property一样 attr_accessor 表明是示例的getter和setter 下面的是rails的扩展,裸体class里面用,貌似会报错 cattr_accessor 表明是类 ...

  6. JS的数据属性和访问器属性

    ECMA-262第5版在定义只有内部才用的特性(attribute)时,描述了属性(property)的各种特征.ECMA-262定义这些特性是为了实现javascript引擎用的,因此在javasc ...

  7. JavaScript对象的两类属性(数据属性与访问器属性)

    对JavaScript来说,属性并非只是简单的名称和值,JavaScript用一组特征(attribute)来描述属性 (property). 第一类属性数据属性具有四个特征. value:就是属性的 ...

  8. JavaScript 属性类型(数据属性和访问器属性)

    数据属性 数据属性包含一个数据值的位置.在这个位置可以读取和写入值.数据属性有 4 个描述其行为的特性. [[Configurable]]:表示能否通过 delete 删除属性从而重新定义属性,能否修 ...

  9. javascript对象属性——数据属性和访问器属性

    ECMA-262第五版在定义时,描述了属性property的各种特征,定义这些特性是为了实现javascript引擎用的,为了表示该特性是内部值,规范把它们放在了两对儿方括号中,例如[[Enumera ...

随机推荐

  1. OAuth2.0认证介绍

    OAuth2.0鉴权 返回 目录 [隐藏] 1 腾讯微博OAuth2.0认证介绍 2 获取accesstoken的两种方式 2.1 1.Authorization code grant 2.1.1 第 ...

  2. Javascript 【JSON对象】

    var box = JSON.parse(json);     //将字符串解析为JSON var json = JSON.stringify(box);    //讲JSON转换为字符串 var b ...

  3. 如何调教Android Studio-Windows安装AS后的必备工作

    未完待续... 工欲善其事必先利其器,你已经抛弃被大众诟病的Eclipse投入Google亲儿子Android Studio的怀抱,可是不了解As的脾气,怎么让它服服帖帖的为提高开发效率做贡献呢. 关 ...

  4. oracle11g用户名密码不区分大小写

    oracle 11g 以前的版本的用户名和密码是不区分大小写的; oracle 11g 用户名和密码默认区分大小写,可更改alter system set sec_case_sensitive_log ...

  5. typedef用法总结。

    引用贴:http://www.cnblogs.com/csyisong/archive/2009/01/09/1372363.html 首先#define为预处理,与typedef是完全不同的机制.详 ...

  6. linux系统下memcached启动正常但程序无法连接的问题解决

    在虚拟机linux安装好memcached之后,试着用java程序连接一下memcached的服务端,但却出现了以下错误 com.schooner.MemCached.SchoonerSockIOPo ...

  7. Android 模块化编程之引用本地的aar

    转: http://www.stormzhang.com/android/2015/03/01/android-reference-local-aar/ 随着项目越来越多,代码的复用就变得异常重要,这 ...

  8. 使用PDO执行SQL语句exec()、query()

    在PHP脚本中,通过PDO执行SQL查询与数据库进行交互,可以分为三种不同的策略,使用哪一种方法取决于你要做什么操作. 1.使用PDO::exec()方法 当执行INSERT.UPDATE和DELET ...

  9. React 同构

    React 同构 搬运 https://segmentfault.com/a/1190000004671209 究竟什么是同构呢? 同构就是希望前端 后端都使用同一套逻辑 同一套代码 Nodejs出现 ...

  10. DTU软硬件方案

        经过周末的思考以及已有的经验,准备将DTU研发项目命名为QN100,确定了初步的软硬件方案,产品名称大家如果有好的名字欢迎提供.     硬件:     采用STM32F101RD为主处理器, ...