概述
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#]C#语言之坑——隐藏继承自父类的属性问题场景解决方案的全部内容,希望文章能够帮你解决[编程语言][C#]C#语言之坑——隐藏继承自父类的属性问题场景解决方案所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复