[编程语言][C#]C#语言之坑——隐藏继承自父类的属性

C#继承之隐藏基类方法 C#继承之隐藏基类方法或其他信息 当我们在定义一个类并继承了其它类的时候,在派生类中是没有办法删除基类的任何成员,就像我们不能改变父母的基因一样,所能做的只能采用隐藏父类方法,也就像使基因变为隐性基因。具体方式如下: 屏蔽数据成员:在派生类中声明名称和类型相同的成员 屏蔽函数成员:在派生类中声明新的函数签名相同的成员 让编译器知道:在派生类中声明新的函数签名相同的成员前 阅读详情

C#语言之坑——隐藏继承自基类的属性

问题

C#语言的继承机制,使得基类的所有公有属性都包含在派生类中。在某种场景下,是不允许类的使用者直接访问这些继承自基类的属性,但语言本身无法直接隐藏这些属性。

场景

长方形类具有公共属性Width和Height,正方形类继承自长方形类。此时,如果正方形类继续提供公共属性Width和Height就不合适了,应该另外提供公共属性SideLength。

解决方案

使用类ChildClass3的设计方式解开间接隐藏继承自基类的公共属性。

using System;

namespace ConsoleApp1
{
	internal class Program
	{
		static void Main(string[] args)
		{
			ParentClass parent = new()
			{
				Message = "This is ParentClass"
			};

			ChildClass1 class1 = new()
			{
				Message = "This is ChildClass 1"
			};

			ChildClass2 child2 = new()
			{
				Message = "This is ChildClass 2"
			};

			ChildClass3 child3 = new()
			{
				// 无法为属性或索引器“ChildClass3.Message”赋值 - 它是只读的
				//Message = "This is ChildClass 3"

				ChildMessage = "This is ChildClass 3"
			};
			
			ChildClass4 child4 = new()
			{
				// 此处依然可访问到基类的Message
				Message = "This is ChildClass 3"
			};
		}
	}

	class ParentClass
	{
		private string _Message = string.Empty;
		public string Message
		{
			get
			{
				return _Message;
			}
			set
			{
				_Message = value;
				Console.WriteLine($"[Parent] Message: {_Message}");
			}
		}
	}

	class ChildClass1 : ParentClass
	{

	}

	class ChildClass2 : ParentClass
	{
		private string _Message = string.Empty;
		public new string Message
		{
			get
			{
				return _Message;
			}
			set
			{
				_Message = value;
				Console.WriteLine($"[Child] Message: {_Message}");
			}
		}
	}

	class ChildClass3 : ParentClass
	{
		// 隐藏基类的属性,拒绝类的使用者直接访问继承自基类的公共属性
		public new string Message { get; } = string.Empty;

		// 重新设计自己的属性,但使用基类的属性存储值
		public string ChildMessage
		{
			get
			{
				return base.Message;
			}
			set
			{
				base.Message = value;
				Console.WriteLine($"[Child] Message: {base.Message}");
			}
		}
	}

	class ChildClass4 : ParentClass
	{
		private string ChildMessage
		{
			get
			{
				return base.Message;
			}
			set
			{
				base.Message = value;
				Console.WriteLine($"[Child] Message: {base.Message}");
			}
		}
	}
}

有个细节问题需要注意:C#中,如果使用关键字new隐藏继承自基类的属性,但同时使用修饰符private则隐藏失败。

C#中的TextBox隐藏和显示属性及示例 在上面的示例中,我们创建了一个Windows窗体应用程序,并在窗体加载事件中动态创建了一个TextBox控件、一个显示按钮和一个隐藏按钮。本文介绍了C#中的TextBox.Visible属性,该属性用于控制TextBox控件在界面上的显示和隐藏。在C#中,TextBox.Visible是一个布尔类型的属性,它决定了TextBox控件是否在界面上可见。通过上述示例,我们可以看到使用C#中的TextBox.Visible属性非常简单,只需将其设置为true或false即可控制TextBox的隐藏和显示。 阅读详情

相关推荐

C#编程语言系统化教学PPT课件

类的定义包括类名、访问修饰符、成员变量和方法。类的成员变量可以是字段、属性或常量。// 字段// 属性// 方法逻辑分析:width和height是私有字段,用于存储矩形的尺寸。Width和Height是公开属性,提供安全的访问方式。GetArea()方法用于计算矩形的面积。继承允许一个类(派生类)从另一个类(基类)继承其成员,从而实现代码复用。set;");逻辑分析:Animal是基类,定义了通用属性和方法。Dog是派生类,继承自。

weixin_42575109的博客 946

C#中自定义控件隐藏基类成员(属性、方法和事件)的方法

编写自定义控件时,总是继承C#中提供的Control类,而Control类是C#中所有窗体控件的基类,里面定义了大量的属性、方法和事件,而很多基类成员在自定义控件中可能不需要,因为编写者会希望在自定义控件中隐藏这些成员,避免使用者调用这些成员。        从面向对象的角度来看,不允许调用子类者访问其基类的公共成员是不可能的,我们不可能去掉或者改写基类的公共成员,即使基类成员是抽象的或是虚的,

XuXuemin的专栏 8632

C#编程语言深度学习指南

C#(发音为"See Sharp")是一种简单、现代、面向对象的编程语言。由微软开发,用于.NET框架中,它于2002年与.NET框架一起首次发布。C#被设计为一种安全、简单、现代的语言,它集合了C和C++的高级编程能力、Delphi的快速应用开发和Visual Basic的易用性。C#快速成为企业级开发环境中的首选语言之一,尤其是在Windows平台的应用开发中。初学者在掌握C#时,需要从其基础语法着手。

weixin_32661831的博客 747

C#如何在派生类中不显示父类的一些属性以及TypeDescriptor使用

public SonClass:FatherClass { 定义属性 。。。。 } Type thisType = typeof(SonClass);方法一: PropertyInfo[] pis = thisType.BaseType.GetProperties();//thisType.BaseType就是FatherClass foreach (PropertyInfo p...

weixin_34208283的博客 611

C#子类舍弃属性转换为父类UtilSubToBase.cs

利用C#反射将子类舍弃多余的属性转换为父类,用途比较少。

主板USB接口全部失效解决方案(通用串行总线USB控制器有黄色叹号)保姆级教程亲测有效

通用串行总线控制器总是有叹号解决办法 办公室的崩腾时代老电脑,疫情期间没人用,来了开机之后发现鼠标键盘都用不了,本以为是主机放时间长出了问题,后来想起来就百度了“鼠标键盘都失效”的标题,结果发现了“串行总线控制器总是感叹号”的关联问题。正好办公室电脑都装有teamviwer常用来远程办公(在家偷懒)。所以通过远程发现电脑室可以运行的。并在控制面板发现:通用串行总线控制器总是感叹号,插入外设时USB无反应。如图:​ 并且右键选中其中一个,点击最后一个选项:“属性” 可以发现“设备状态”中会提示“由...

xiao_bai_0_0的博客 2万+

C#编程语言基础10

面向对象之继承 继承概念 在C#中,类的继承是指在一个现有类的基础上去构建一个新的类,构建出来的新类被称作子类,现有的类被称作父类,子类会自动拥有父类除构造方法和析构方法以外的所有成员。 继承关系的相关语法: class 子类:父类 { } 对于继承父类的子类来说,子类可以使用父类中公有的成员。 对于C#来说,子类单继承一个父类,也就是说,C#继承具有单一性。 多个类可以同时继承同一个父类。 在C#中,多层继承是可以的,即一个类的父类可以再去继承其他类,例如C类继承自B类,B类又继承自A类,这时,C类也可称

cyl16688 244

iTunes备份文件路径修改方法

因为以前的很多帖子iTunes都不是从微软下载的,而现在的iTunes一般都是微软商店里面的,它的路径为:“C:\Users\ 你的用户名 \Apple\MobileSync” (注:用户名,根据个人电脑名称更改)打开iTunes备份路径:“C:\Users\txh\AppData\Roaming\Apple Computer\MobileSync”,其中文件夹MobileSync就是用来存放备份文件的。创建你想备份纯在的目录创建备份文件目录(我的是G:/APPLE/Backup)2.粘贴的剪切文件目录。

尘玥的故事 1万+

编程语言详细介绍C#中new的几种用法

编程语言详细介绍C#中new的几种用法 本文主要介绍了C#中new的几种用法,具有很好的参考价值,下面跟着小编一起来看下吧 在 C# 中,new 关键字可用作运算符、修饰符或约束。 new 运算符 用于创建对象和调用构造函数。 new 修饰符 用于向基类成员隐藏继承成员。 new 约束 用于在泛型声明中约束可能用作类型参数的参数的类型。 new 修饰符(C# 参考) 在用作修饰符时,new 关键字可以显式隐藏从基类继承的成员。隐藏继承的成员意味着该成员的派生版本将替换基类版本。在不使

1万+

cadence virtuoso 激励信号源

vpulse,vpwl,vsin,vsource信号源介绍

努力学习的IC小白 3万+

CST入门——0. 安装CST Studio Suite 2022

安装CST Studio Suite 2022详细操作步骤

plmxu34的博客 6万+

【C#】C#面向对象(封装,继承,多态,抽象)

多态是指同一操作在不同对象上具有不同的表现形式.通过多态,可以使用统一的接口来调用不同对象的特定实现抽象是对现实世界复杂对象的建模,提取出关键特性,忽略不必要的细节.抽象可以通过抽象类和接口来实现,提供一个模板,让子类实现特定的功能封装:通过访问修饰符和属性,保护对象的内部状态,提供受控的访问接口继承;子类继承父类的属性和方法,实现代码重用和逻辑扩展多态:通过方法重写和接口实现,实现相同接口的不同表现形式,增强代码的灵活性和可扩展性抽象:通过抽象类和接口,定义对象的抽象模型,强制子类实现特定的行为。

冰茶的博客 1546

Unity Sprite Atlas C++底层原理全解析 —— “像素聚合工厂”的秘密

Unity Sprite Atlas C++底层实现简析 Sprite Atlas是Unity中用于优化2D渲染性能的核心机制,其C++底层实现如同一个高效的"像素聚合工厂"。该系统通过将多个小纹理合并为一个大纹理,显著减少Draw Call次数和GPU纹理切换开销。 在数据结构上,底层采用SpriteAtlasData存储图集元数据,PackedTexture管理合并后的大纹理,SpriteFrame记录每个子精灵的位置信息,并通过哈希表实现快速查找。编辑器阶段使用最大矩形等算法优化空

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 204

C#:强大编程语言的多面魅力

与传统高级语言的相似性,C# 十分接近于传统高级语言 C 和 C++,是一门面向对象的编程语言,与 Java 有许多相似之处,拥有强大的编程功能,因此受到广大程序员的青睐。总之,C# 在实际项目中有广泛的应用,新手在学习 C# 时需要注意了解基本概念和语法、学习.NET 框架、熟悉开发工具、学习数据结构和算法以及了解 C# 在实际项目中的应用。通过整合相关技术,C# 将为开发者提供更加便捷、高效的开发体验,无论是深度学习框架的集成还是机器学习模型的训练和部署,C# 都将提供强大的支持。

热爱技术 4558

【QT开发教程】QMatrix4x4类详解及实战应用:Qt中的4x4矩阵变换

在计算机图形学和三维图形应用中,矩阵变换是一个核心概念。Qt框架提供了QMatrix4x4类,用于处理4x4矩阵变换,帮助开发者在三维空间中进行复杂的几何计算。本文将深入探讨QMatrix4x4的功能及其在Qt应用中的实际应用。

科技改变人类,技术成就未来 716

Arduino ESP32 Web服务器从microSD卡读取

Arduino ESP32 Web服务器从microSD卡读取 将网页内容放到SD卡中,当有客户端数据请求时,从SD卡读取信息进行发送,比起SPIFFS文件系统,更节约板上的硬件资源。 SD卡接线说明 ESP32----- SD D5(GPIO 5)-----CS D18(GPIO 18)-----SCK D19(GPIO 19)-----MISO D23()GPIO 23-----MOSI 文件放置 需要把文件放置到SD卡的根目录下。注意SD卡的格式FAT32格式。 实例代码 /*

perseverance51博客 1433

Vala编程语言教程-属性

在面向对象编程中,向类使用者隐藏实现细节是良好的实践(信息隐藏原则),这样您后续可以修改内部实现而不会破坏公共API。一种常见的做法是将字段设为私有,并通过访问器方法(getters 和 setters)提供值的获取和设置。这种方式可行,但Vala提供了更好的解决方案。问题在于这些方法使用起来较为繁琐。这种语法对C#程序员来说应该很熟悉。属性包含get和set代码块来获取和设置值,value是表示新值的保留字。现在您可以像访问公共字段一样使用属性,但实际执行的是get和set。

who_I_am__的博客 634

vTestStudio保姆教程之从0到1搭建软件环境

学习HIL测试的必经之路,保姆级教学VT从搭建到测试。

欢迎来到eee的博客 4185

十大热门编程语言的介绍

小编给大家分享一篇关于现阶段十大热门编程语言的文章:经过流行的搜索引擎,如谷歌,必应,雅虎,维基百科,亚马逊,YouTube和百度,用于计算评级;得出十大热门编程语言排行榜的榜单: 根据百度百科以及网上查阅总结分析以上十大热门编程语言的介绍、特点、前景: 1、Java 基本介绍: Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此J...

农村小白的博客 3万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

C#编程语言

C#

YYYMarshal的博客 1410

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

C# 继承

C# 类的继承 (1)结构体不能被继承 (2)基类的所有成员都会被派生类继承,但是private继承后不能被访问,其余类型都可以被访问。 (3)类继承时的基类只能有1个,并且必须放在“:”的后面(紧挨着),后面可以跟多个接口 (4)基类方法声明为virtual时,派生类可以利用override重写此方法 public class Xt { int xx; public overrid

eskimoer的专栏 1134

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

C#--类之隐藏基类的成员

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication3 { public class BaseClass { ...

a0103122120的博客 620

常用编程语言介绍及各语言特点

常用编程语言及各语言特点 从1946年至今,电脑已经发展了70多年了,从最开始的电子管到如今的个人PC,除了硬件上的更新迭代外,软件的更新即编程语言的发展也是重中之重。 而发展至今的 ...

BlockBook的博客 808

【C# 基础精讲】继承、封装、多态

继承、封装和多态是面向对象编程的核心概念,它们有助于创建更加模块化、可扩展和可维护的代码。继承允许子类继承父类的属性和方法,实现代码的复用和功能的扩展。封装将类的内部实现细节隐藏,通过接口提供对外的访问方式,提高代码的安全性和可维护性。多态允许不同类的对象对相同的消息做出响应,表现出不同的行为,提供了更加灵活的调用方式。这三个概念在C#中得到了广泛的应用,通过深入理解它们的含义和应用,您将能够编写出更加优雅、健壮的面向对象程序。

繁依Fanyi的博客 1708

什么是c#面向对象的开发语言,C#及面向对象编程语言.pdf

2 章 C#与面向对象编程语言阅读目标树立面向对象设计思想理解封装、继承、抽象、多态的概念学会如何识别系统中的对象2.1 面向对象思想面向对象思想为软件设计与开发赋予了哲学的意义。在哲学的世界里,小至沙粒微尘,大至日月星辰乃至宇宙,均可视为单独的个体对象而存在。如果以哲学的目光凝视程序的世界,又何尝不是如此?一个用户,一种销售策略,一条消 ,一张订单,一个Web 网页……,运用面向对象思想,则它...

weixin_34910865的博客 253

C#面向对象编程:动物类继承实战

本文介绍了C#面向对象编程的核心概念封装和继承,通过动物类案例进行实践。主要内容包括:1)创建Animal父类定义公共字段和构造方法;2)Ji和Dog子类继承父类,通过private封装字段,重写ToString实现自定义输出;3)演示base调用父类构造方法、属性封装数据等关键语法。案例完整展示了面向对象继承复用代码和封装保护数据的优势,是C#基础开发的重要实践。

dhhdfv的博客 299
上一篇: 欢迎使用Markdown编辑器
下一篇: [编程语言][C++][Qt]CMake给Windows可执行程序添加图标
cloudblaze
博客等级 码龄17年 81粉丝 125原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值