首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >防止类被实例化

防止类被实例化
EN

Stack Overflow用户
提问于 2016-03-10 11:07:07
回答 4查看 1.9K关注 0票数 2

嗨,我想要一个不能实例化的类,但它可以作为一个静态字段添加到另一个类中,但是我无法实现它;

以下是我所做的;

代码语言:javascript
运行
复制
    public class ValueListManager
    {
        public static Operations myOps { get { return new Ops(); } }         
    }

    public interface Operations
    {
        void Call();
    }

    public class Ops : Operations
    { 

        public void Call()
        {

        }
    }

我不想在其他地方实例化Ops类。基本上我想要能够;

代码语言:javascript
运行
复制
    ValueListManager.Operations.Call();

但是我不想像这样使用ops类;

代码语言:javascript
运行
复制
    var ops = new Ops();

有办法做到这一点吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-03-10 11:12:47

您可以通过将Ops类声明为要使用它的ValueListManager类中的私有类来实现这一点:

代码语言:javascript
运行
复制
public class ValueListManager
{
    private class Ops : Operations
    {
        public Ops()
        {
        }

        public void Call()
        {
        }
    }

    public static Operations myOps { get { return new Ops(); } }
}

注意,在这个基于代码的示例中,每次访问myOps属性时都会创建Ops类的一个新实例。如果不需要,则需要在创建Ops实例后将其存储在静态字段中,并在属性的Getter中使用。

票数 6
EN

Stack Overflow用户

发布于 2016-03-10 11:16:31

据我所知,您希望只实例化这个类一次,然后使用它

您可以使用Singletone模式,也可以对此模式使用继承

代码语言:javascript
运行
复制
public class Ops: Operations
{
   private static Ops instance;

   private Ops() {}

   public static Ops Instance
   {
      get 
      {
         if (instance == null)
         {
            instance = new Ops();
         }
         return instance;
      }
   }

 public void Call()
 {
   // do something
 }
}

在您想要使用它的地方,可以调用它的方法:

代码语言:javascript
运行
复制
Ops.Instance.Call()
票数 6
EN

Stack Overflow用户

发布于 2016-03-10 11:20:46

如果出于某种原因不想嵌套类,并且根本不想更改Ops类本身以外的任何内容,则可以将代码放入不同的程序集中(向解决方案添加类库),并使构造函数internal

代码语言:javascript
运行
复制
public class ValueListManager
{
  public static Operations myOps { get { return new Ops(); } }         
}

public class Ops : Operations
{ 
  internal Ops() {}
  public void Call()
  {
  }
}

然后只需要从要使用的程序集中添加对程序集的引用,就不需要更改任何其他代码。

构造函数(因此new Ops())只能从该程序集访问,其他程序集中的代码将无法new

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35914692

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档