【问题标题】:Class instantiation ("new") problems with assemblies and classes [duplicate]程序集和类的类实例化(“新”)问题[重复]
【发布时间】:2020-04-18 22:23:19
【问题描述】:

我正在做一个项目,该项目要求我只通过它自己的程序集实例化(“新”)一个类,而不是其他程序集。这可能吗?

我尝试使用抽象,但这意味着我无法在任何地方实例化它。

示例: 以下类在同一个项目/程序集中。

public class Banana
{
    public Banana()
    {
        ...
    }
}

public class Food.
{
    public static Banana InstantiateBanana()
    {
        Banana banana = new Banana();//<=====How can you instantiate it inside the same assembly? I don't want other assemblies to instantiate it.
        ...
        return banana;
    }
}

【问题讨论】:

  • 删除抽象并使实例化方法静态。
  • 您在寻找protected 成员访问修饰符吗?也许看看Accessibility Levels
  • 感谢您这么快回复! :) 我编辑了代码,但它仍然没有工作...... :(
  • @MinijacksaysreinstateMonica 我应该在哪里使用受保护的修饰符?继承类不受保护吗?
  • 当您说“其他程序集”时,您究竟是什么意思?如果您将构造函数设为私有,但保持其他所有内容不变,则没有其他内容可以在香蕉上调用 new,但仍然可以通过实例化方法创建一个。

标签: c# class abstract instantiation


【解决方案1】:

我想通了!

public class Banana
{
    private Banana()
    {
        ...
    }

    public static Banana InstantiateBanana()
    {
        Banana banana = new Banana();//<=====How can you instantiate it inside this class? I don't want other assemblies to instantiate it.
        ...
        return banana;
    }
}

这应该可行。仅在其自己的类中实例化 Banana 类,而不是在其他类中。我只需要一个私有构造函数和一个静态方法来实例化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多