【问题标题】:Different Derived Class' Access Modifiers from a Single Base Class来自单个基类的不同派生类的访问修饰符
【发布时间】:2012-11-04 00:51:21
【问题描述】:

除非有必要,否则我不想编写相同的代码。

应该有一个基类(接口不适合,我想)

public class MyUser
{
    public string Username
    {
        get;
        set;
    }
    //...many other fields
}

在其中一个派生类中,需要 PRIVATE 集修饰符(又名仅用于此类的方法)。

public class MyPrivateInfo : MyUser//, IMyUser
{
    public string Username
    {
        get;
        private set;
    }
}

在另一个类中,需要 INTERNAL 修饰符(也称为库范围)。

public class MyLibInfo : MyUser//, IMyUser
{
    public string Username
    {
        get;
        internal set;
    }
    //...many other fields
}

我想有办法创建一个 MyUser 类型的字段,但这不是目的。每个类中的字段都应该可以直接访问。

最好的方法是什么?或者没有?

【问题讨论】:

  • 在您的派生类中,您实际上隐藏了基类属性并创建了一个新属性。

标签: c# inheritance properties hierarchy access-modifiers


【解决方案1】:

首先,您可以为此使用接口。您只需要不指定set 方法。

这将允许您为 set 定义您想要的任何可访问性。

public interface IUser
{
    string Username { get; }
}

public class MyPrivateInfo : IUser
{
    public string Username
    {
        get;
        private set;
    }
}

public class MyLibInfo : IUser
{
    public string Username
    {
        get;
        internal set;
    }
}

【讨论】:

  • 所以我仍然必须指定每个属性,真的没有更通用的方法了吗?这样做的唯一好处是,如果接口发生变化,那么编译器会提示所有发生变化的地方(例如添加的新成员)?
  • @gr9zev - 根据您修改可自定义访问权限的要求,您是对的 - 您必须重新声明这些属性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-21
  • 2017-03-28
  • 2020-02-11
  • 2020-11-24
  • 1970-01-01
相关资源
最近更新 更多