程序集和类的类实例化(“新”)问题[重复]

Posted

技术标签:

【中文标题】程序集和类的类实例化(“新”)问题[重复]【英文标题】: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,但仍然可以通过实例化方法创建一个。 【参考方案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 类,而不是在其他类中。我只需要一个私有构造函数和一个静态方法来实例化。

【讨论】:

以上是关于程序集和类的类实例化(“新”)问题[重复]的主要内容,如果未能解决你的问题,请参考以下文章

返回非实例化类类型的类型提示[重复]

Python的内置方法和类的继承举例

类和对象(类和类的实例化,this,static关键字,封装)

类和对象(类和类的实例化,this,static关键字,封装)

创建不可变对象,在没有新的情况下实例化 [重复]

九结构和类(结构的概念,类的概念,声明,构造函数,对象的实例化,类和对象的关系,实例的和静态的)