嗨,我想要一个不能实例化的类,但它可以作为一个静态字段添加到另一个类中,但是我无法实现它;
以下是我所做的;
public class ValueListManager
{
public static Operations myOps { get { return new Ops(); } }
}
public interface Operations
{
void Call();
}
public class Ops : Operations
{
public void Call()
{
}
}我不想在其他地方实例化Ops类。基本上我想要能够;
ValueListManager.Operations.Call();但是我不想像这样使用ops类;
var ops = new Ops();有办法做到这一点吗?
发布于 2016-03-10 11:12:47
您可以通过将Ops类声明为要使用它的ValueListManager类中的私有类来实现这一点:
public class ValueListManager
{
private class Ops : Operations
{
public Ops()
{
}
public void Call()
{
}
}
public static Operations myOps { get { return new Ops(); } }
}注意,在这个基于代码的示例中,每次访问myOps属性时都会创建Ops类的一个新实例。如果不需要,则需要在创建Ops实例后将其存储在静态字段中,并在属性的Getter中使用。
发布于 2016-03-10 11:16:31
据我所知,您希望只实例化这个类一次,然后使用它。
您可以使用Singletone模式,也可以对此模式使用继承。
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
}
}在您想要使用它的地方,可以调用它的方法:
Ops.Instance.Call()发布于 2016-03-10 11:20:46
如果出于某种原因不想嵌套类,并且根本不想更改Ops类本身以外的任何内容,则可以将代码放入不同的程序集中(向解决方案添加类库),并使构造函数internal
public class ValueListManager
{
public static Operations myOps { get { return new Ops(); } }
}
public class Ops : Operations
{
internal Ops() {}
public void Call()
{
}
}然后只需要从要使用的程序集中添加对程序集的引用,就不需要更改任何其他代码。
构造函数(因此new Ops())只能从该程序集访问,其他程序集中的代码将无法new。
https://stackoverflow.com/questions/35914692
复制相似问题