也许一个令人困惑的标题,我后面是一个类,它只有一定的实例化。仍然困惑?所以我需要一个类(或者一个结构?),它有两个字段,值和字符串代表(现在反正,导致其他领域;图像的网址等)。我需要一个容器,一个List,ObservColl,IEnumerable,只是包含它们的东西。用预定义的类创建一个列表类,这是无法创建列表的<t>类
但我不希望该类可以被任何东西实例化,除了容器对象,但仍然有类可用作为类型设置为另一个类的字段。
这可能吗?或者我将不得不牺牲一些东西?
也许一个令人困惑的标题,我后面是一个类,它只有一定的实例化。仍然困惑?所以我需要一个类(或者一个结构?),它有两个字段,值和字符串代表(现在反正,导致其他领域;图像的网址等)。我需要一个容器,一个List,ObservColl,IEnumerable,只是包含它们的东西。用预定义的类创建一个列表类,这是无法创建列表的<t>类
但我不希望该类可以被任何东西实例化,除了容器对象,但仍然有类可用作为类型设置为另一个类的字段。
这可能吗?或者我将不得不牺牲一些东西?
我希望这是你想要什么:
使类公共或内部(如需要),但构造私有:
public class MyClass
{
private MyClass() { }
}
然后创建一个公开或内部的静态方法该类要获取您的列表:
public class MyClass
{
// ...
public static List<MyClass> GetList()
{
List<MyClass> list = new List<MyClass>();
list.Add(new MyClass());
// ...
return list;
}
}
您现在只能通过此方法获取列表。 List<MyClass> a = MyClass.GetList();
如果你愿意,你可以用一个静态属性和普里瓦静态字段实现它,太:
public class MyClass
{
// ...
static MyClass()
{
myList = new List<MyClass>();
myList.Add(new MyClass());
// ...
}
private static List<MyClass> myList = null;
public static List<MyClass> MyList
{
get { return myList; }
}
}
也是我的解决方案。留下问题:什么是“单身”的复数形式? – 2010-06-24 08:15:31
@Henk枚举类型 – 2010-06-24 08:16:53
从MyList返回一个不可变的值(例如IEnumerable
构造函数的访问级别可以设置为以下几点:
的最接近的事情你可以做,以实现你的意思是创建一个仅包含你的“容器”级和你的“星级”类的新的命名空间,使星级构造内部。但是,如果你(或其他人)扩展该名称空间,构造函数将可用于名称空间的所有成员。
public interface IInnerType
{
Int32 Id { get; set; }
}
public class Container
{
public Container()
{
Items = new InnerTypeCollection();
Items.Add(new InnerType() { Id = 1 });
Items.Add(new InnerType() { Id = 2 });
Items.Add(new InnerType() { Id = 3 });
Items.Add(new InnerType() { Id = 4 });
Items.Add(new InnerType() { Id = 5 });
}
public InnerTypeCollection Items { get; protected set; }
class InnerType : IInnerType
{
public InnerType()
{ }
public Int32 Id { get; set; }
}
public class InnerTypeCollection : ICollection<IInnerType>
{
List<IInnerType> Items { get; set; }
public InnerTypeCollection()
{
Items = new List<IInnerType>();
}
public void Add(IInnerType item)
{
if (!(item is InnerType))
{
throw new ArgumentException("item must be of InnerType");
}
Items.Add(item);
}
public void Clear()
{
Items.Clear();
}
public bool Contains(IInnerType item)
{
return Items.Contains(item);
}
public void CopyTo(IInnerType[] array, int arrayIndex)
{
Items.CopyTo(array, arrayIndex);
}
public int Count
{
get { return Items.Count; }
}
public bool IsReadOnly
{
get { return (Items as ICollection<IInnerType>).IsReadOnly; }
}
public bool Remove(IInnerType item)
{
return Items.Remove(item);
}
public IEnumerator<IInnerType> GetEnumerator()
{
return Items.GetEnumerator();
}
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return Items.GetEnumerator();
}
}
}
只有'Container'类将能够创建'InnerType'的实例,并且自定义集合将限制所有不是'InnerType'的添加。 – decyclone 2010-06-24 08:13:06
将Star Rating作为容器的接口公开,并在容器上放置Factory以返回具体实现?
仍然困惑.. – simendsjo 2010-06-24 07:58:25
难道你不能使用枚举来描述评级,并且一些工厂根据枚举生成各种类型的评级数据吗? – Mathias 2010-06-24 08:18:10