C#拾遗系列(2):属性

简介:

1. 这里主要演示属性的继承和覆盖

2. 把属性理解为方法,实际上编译器就是把属性生成方法

示例:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace NetTest

{

 

   public class TestPerpoerty

    {

 

        class DerivedClass : BaseClass

       {

           private string name = "Name-DerivedClass";

           private string id = "ID-DerivedClass";

 

           new public string Name

           {

               get

               {

                   return name;

               }

 

               // Using "protected" would make the set accessor not accessible.

               set

               {

                   name = value;

               }

           }

 

           // Using private on the following property hides it in the Main Class.

           // Any assignment to the property will use Id in BaseClass.

           new private string Id

           {

               get

               {

                   return id;

               }

               set

               {

                   id = value;

               }

           }

       }

 

 

        class BaseClass

        {

            private string name = "Name-BaseClass";

            private string id = "ID-BaseClass";

 

            public string Name

            {

                get { return name; }

                set { }

            }

 

            public string Id

            {

                get { return id; }

                set { }

            }

        }

 

        public  void Test()

        {

            BaseClass b1 = new BaseClass();

            DerivedClass d1 = new DerivedClass();

 

            b1.Name = "Mary";

            d1.Name = "John";

 

            b1.Id = "Mary123";

            d1.Id = "John123";  // The BaseClass.Id property is called.

 

            System.Console.WriteLine("Base: {0}, {1}", b1.Name, b1.Id);

            System.Console.WriteLine("Derived: {0}, {1}", d1.Name, d1.Id);

 

            /*

            输出:

            Name and ID in the base class: Name-BaseClass, ID-BaseClass

            Name and ID in the derived class: John, ID-BaseClass

                        *

            --------------------------------

            注意,如果将 new private string Id 替换为 new public string Id,则得到如下输出:

            Name and ID in the base class: Name-BaseClass, ID-BaseClass

 

            Name and ID in the derived class: John, John123

            */

        }

    }

 

}

本文转自敏捷的水博客园博客,原文链接http://www.cnblogs.com/cnblogsfans/archive/2008/06/11/1217388.html如需转载请自行联系原作者


王德水

相关文章
|
22天前
|
C#
C#拾遗补漏之goto跳转语句
在我们日常工作中常用的C#跳转语句有break、continue、return,但是还有一个C#跳转语句很多同学可能都比较的陌生就是goto,今天大姚带大家一起来认识一下goto语句及其它的优缺点。
|
4月前
|
存储 安全 编译器
C# 11.0中的泛型属性:类型安全的新篇章
【1月更文挑战第23天】C# 11.0引入了泛型属性的概念,这一新特性为开发者提供了更高级别的类型安全性和灵活性。本文将详细探讨C# 11.0中泛型属性的工作原理、使用场景以及它们对现有编程模式的改进。通过深入了解泛型属性,开发者将能够编写更加健壮、可维护的代码,并充分利用C#语言的最新发展。
|
20天前
|
存储 编译器 C#
|
C# Windows 容器
C#或Winform中的消息通知之系统托盘的气泡提示窗口(系统toast通知)、ToolTip控件和ToolTipText属性
NotifyIcon控件表示系统右下角任务栏上的托盘图标,其ShowBalloonTip方法用于显示气球状提示框(Win10只有为本地Toast通知),ToolTip\oolTipText可以...
1491 0
C#或Winform中的消息通知之系统托盘的气泡提示窗口(系统toast通知)、ToolTip控件和ToolTipText属性
|
22天前
|
开发框架 人工智能 .NET
C#/.NET/.NET Core拾遗补漏合集(持续更新)
在这个快速发展的技术世界中,时常会有一些重要的知识点、信息或细节被忽略或遗漏。《C#/.NET/.NET Core拾遗补漏》专栏我们将探讨一些可能被忽略或遗漏的重要知识点、信息或细节,以帮助大家更全面地了解这些技术栈的特性和发展方向。
|
22天前
|
C#
C# Dev TreeList常用属性方法
C# Dev TreeList常用属性方法
|
2月前
|
Java C#
C#学习相关系列之多线程(七)---Task的相关属性用法
C#学习相关系列之多线程(七)---Task的相关属性用法
|
4月前
|
开发框架 .NET C#
C# 10.0中的扩展属性与模式匹配:深入解析
【1月更文挑战第20天】C# 10.0引入了众多新特性,其中扩展属性与模式匹配的结合为开发者提供了更强大、更灵活的类型检查和代码分支能力。通过这一特性,开发者可以在不修改原始类的情况下,为其添加新的行为,并在模式匹配中利用这些扩展属性进行更精细的控制。本文将详细探讨C# 10.0中扩展属性与模式匹配的工作原理、使用场景以及最佳实践,帮助读者更好地理解和应用这一新功能。
|
4月前
|
运维 编译器 C#
C# 9.0中的本地函数属性:深化函数级别的控制
【1月更文挑战第17天】C# 9.0引入了本地函数属性的概念,允许开发者在本地函数上应用属性,从而进一步细化对函数行为的控制。这一新特性不仅增强了代码的可读性和可维护性,还为函数级别的编程提供了更多的灵活性。本文将探讨C# 9.0中本地函数属性的用法、优势以及可能的应用场景,帮助读者更好地理解并应用这一新功能。
|
5月前
|
XML 存储 JSON
C# | 使用Json序列化对象时忽略只读的属性
将对象序列化成为Json字符串是一个使用频率非常高的功能。Json格式具有很高的可读性,同时相较于XML更节省空间。 在开发过程中经常会遇到需要保存配置的场景,比如将配置信息保存在配置类型的实例中,再将这个对象序列化成为Json字符串并保存。当需要加载配置时,则是读取Json格式的字符串再将其还原成配置对象。在序列化的过程中,默认会将所有公开的属性和字段都序列化进入Json字符串中,这其中也会包含只读的属性或字段,而只读的属性和字段在反序列化的过程中其实是无意义的,也就是说这一部分存储是多余的。 本文将讲解如何在执行Json序列化时,忽略掉那些只读的属性和字段。
58 0
C# | 使用Json序列化对象时忽略只读的属性