在c#中的每个派生类中都有一个更具体的接口
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了在c#中的每个派生类中都有一个更具体的接口,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2020字,纯文字阅读大概需要3分钟。
内容图文
![在c#中的每个派生类中都有一个更具体的接口](/upload/InfoBanner/zyjiaocheng/660/69560a6dd7c048a3acc4095a185a0b56.jpg)
我试图给出一个尽可能简单的例子,但是这个问题的本质至少使我感到困惑.
为了重用代码而不重复我的自我,我有一个实现另一个接口IPerson的接口IStudent.
interface IPerson
{
string FirstName { get; set; }
string LastName { get; set; }
}
interface IStudent : IPerson
{
int StudentNumber { get; set; }
}
我有一个实现IStudent的类
class Student : IStudent
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int StudentNumber { get; set; }
}
现在,我有一个抽象类CommunityBase,它的字段类型为IPerson
abstract class CommunityBase
{
public IPerson member;
public CommunityBase(IPerson member)
{
this.member = member;
}
public void ShowName()
{
Console.WriteLine(this.member.FirstName + " " + this.member.LastName);
}
}
我也有一个从CommunityBase派生的类,叫做University.因为大学是更具体的课程,所以我想使用更具体的界面.因此,代码如下:
class University : CommunityBase
{
public new IStudent member;
public University(IStudent member)
: base(member)
{
this.member = member;
}
public void ShowStudentNumber()
{
Console.WriteLine(this.member.StudentNumber);
}
}
为了使所有这些工作正常,应该为IStudent成员声明new关键字.同样,我将需要在基类中一次分配成员字段,并在派生类中再次分配成员字段.
我想做的是在CommunityBase构造函数中分配一次成员,但是这样我不能使用University类中IStudent中定义的属性或方法.
上面的所有代码都能按预期方式编译和运行,但是我想知道是否存在更简单,更简单/更易于阅读的方法.从我的阅读中,如果我继续使用此代码,人们倾向于避免使用new关键字进行隐藏,是否会存在任何潜在的问题?
解决方法:
使您的CommunityBase类通用
abstract class CommunityBase<T> where T : IPerson
{
protected T _member;
public T Member { get return _member; }
public CommunityBase(T member)
{
_member = member;
}
public virtual void ShowName()
{
Console.WriteLine(_member.FirstName + " " + _member.LastName);
}
}
同时将ShowName虚拟化,这使更多具体的类可以覆盖它.
class University : CommunityBase<IStudent>
{
public University(IStudent member)
: base(member)
{
}
public override void ShowName()
{
Console.WriteLine(_member.FirstName + " " + _member.LastName +
" Student-No. = " + _member.StudentNumber);
}
}
内容总结
以上是互联网集市为您收集整理的在c#中的每个派生类中都有一个更具体的接口全部内容,希望文章能够帮你解决在c#中的每个派生类中都有一个更具体的接口所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。