【发布时间】:2013-02-07 16:12:12
【问题描述】:
好吧,假设我有一个这样的结构 A:
Struct A{
private String _SomeText;
private int _SomeValue;
public A(String someText, int SomeValue) { /*.. set the initial values..*/ }
public String SomeText{ get { return _SomeText; } }
public int SomeValue{ get { return _SomeValue; } }
}
现在我想要做的是返回结构 A 作为 ABC 类中的方法的结果,如下所示:
Class ABC{
public A getStructA(){
//creation of Struct A
return a;
}
}
我不希望任何程序员使用我的库(其中将包含 Struct A 和 Class ABC 以及更多内容)能够创建 Struct A 的实例。
我希望创建它的唯一方法是从 getStructA() 方法返回。然后可以通过适当的 getter 访问这些值。
那么有没有办法设置这样的限制?所以一个结构不能在某个类之外实例化?使用 C#、.Net4.0。
感谢您的帮助。
---编辑:----
添加一些关于我为什么要实现这一目标的细节:
- 我的 ABC 班有一些人们可以查询的“状态”。此状态有 2 个字符串值,然后是一长串整数。
- 程序员永远不需要创建“状态”的对象/实例,状态只能由类的“getStatus()”函数返回。
- 我不想将这 3 个字段拆分为不同的方法,因为要获得它们,我正在调用 Windows API (p/invoke),它返回包含所有 3 个字段的类似结构。
- 如果我确实要将其拆分为 3 个方法而不使用该结构,则每次调用这 3 个方法之一时,我都必须缓存结果或从 Windows API 调用该方法...
所以我可以创建一个公共结构,程序员可以根据需要实例化它,这对他们来说是无用的,因为没有方法可以接受它作为参数。或者我可以构造这个库,使得这个结构(或者如果它使事情变得更容易的话,将它更改为一个类)只能作为方法的返回来获得。
【问题讨论】:
-
没有。使用接口。
-
你不能让构造函数
internal或private吗? 编辑:通过查找this 回答了我自己的问题。答案是:“是的,但没用。” -
@Daniel 这听起来更像是一个设计问题。例如,如果您担心用户可能会在调用方法时使用他们自己的
A,而不是您给他们的方法,那么您可能希望查看您的设计,而不是使用结构.请你能再解释一下这个问题的背景吗? -
我认为不可能对结构有这样的限制并且有一个返回相同结构的公共函数。你到底想在这里做什么?
-
最好的办法可能是将
struct更改为class,然后声明构造函数internal。
标签: c# c#-4.0 data-structures struct