【问题标题】:How to hide a class using internal keyword? [duplicate]如何使用 internal 关键字隐藏类? [复制]
【发布时间】:2012-10-03 18:54:54
【问题描述】:

可能重复:
c# internal abstract class, how to hide usage outside assembly

我有一个公共程序集/项目,它有几个抽象类。当我创建一个新程序集时,开发人员应该派生自 MathProblemMathProblemTemplate<T> 类。

所以,我猜MathProblemTemplate 类可以是internal,我的意思是当您计划将基类设置为具体类时,不会在智能感知中显示类MathProblemTemplate,但MathProblemTemplate<T> 是的

// Question classes
public abstract class Question
{
    protected QuestionTemplate Template { get; private set; }

    public Question(QuestionTemplate template)
    {
        this.Template = template;
    }
}

public abstract class MathProblem : Question
{
    public MathProblem(MathProblemTemplate template)
        : base(template)
    {
    }
}

// QuestionTemplate classes
public abstract class QuestionTemplate
{
    public QuestionTemplate() { }
}

// This is the class which I'd like to hide
public abstract class MathProblemTemplate : QuestionTemplate
{
}

public abstract class MathProblemTemplate<T> : MathProblemTemplate
{
    protected abstract T Method1();
    protected abstract T Method2(); 
}

这可能吗?

【问题讨论】:

  • 您是否阅读过您提出问题时出现在列表中的this relevant question
  • 是的,我已经阅读了它,但我仍然收到如下错误: 可访问性不一致:基类 'DevNinja.Core.Models.MathProblemTemplate' 比类 'DevNinja.Core.Models 更难访问.MathProblemTemplate'
  • 嗯,是的,您使用的模板使其与众不同。
  • 除了讨厌的朋友黑客之外,@TomWijsman 提到你的问题的答案说你不能这样做。如果你想从另一个程序集中的类派生,它必须是公共的。
  • 好吧,我的意图只是显示泛型类并隐藏非泛型

标签: c# oop class abstract-class internal


【解决方案1】:

不能,原因是MathProblemTemplate&lt;T&gt; 是公共的,因此它所继承的任何类也必须是公共的。

您可以删除 MathProblemTemplate 并将其中的任何代码移动到 MathProblemTemplate&lt;T&gt;

【讨论】:

  • 但我需要在 MathProblem 构造函数中引用它,这就是我真正需要泛型的原因
  • 在这种情况下,您可能必须将 MathProblem 设为通用,然后提供通用的 MathProblemTemplate,例如public abstract class MathProblem&lt;T&gt; : Question { public MathProblem(MathProblemTemplate&lt;T&gt; template) { } }
  • 将是多余的,因为这应该是一个 MathProblemTemplate。你不这么认为吗?
  • 你在通用版本中使用什么类型?
猜你喜欢
  • 2020-09-11
  • 2016-07-08
  • 2011-12-28
  • 2014-04-19
  • 1970-01-01
  • 2015-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多