gpt4 book ai didi

c# - 在 C# 中提供类的只读列表

转载 作者:行者123 更新时间:2023-11-30 19:07:22 26 4
gpt4 key购买 nike

我有一组自定义数据类型,可用于操作基本数据 block 。例如:

MyTypeA Foo = new MyTypeA();
Foo.ParseString(InputString);
if (Foo.Value > 4) return;

其中一些类型定义了描述类型方面(例如名称、位大小等)的只读属性。

在我的自定义框架中,我希望能够向用户提供这些类型以供在他们的应用程序中使用,但我也想为用户提供可用类型的列表,他们可以轻松地将这些类型绑定(bind)到组合框。我目前的做法:

public static class DataTypes
{
static ReadOnlyCollection<MyDataType> AvailableTypes;

static DataTypes()
{
List<MyDataType> Types = new List<MyDataType>();
Types.Add(new MyTypeA());
Types.Add(new MyTypeB());
AvailableTypes = new ReadOnlyCollection<MyDataType>(Types);
}
}

我对此担心的是,用户可能会从 AvailableTypes 列表中获取一个类型(例如,通过选择一个组合框项目),然后直接使用该引用,而不是创建该类型的克隆并使用他们自己的引用。

如何将可用类型列表设置为只读,这样它就不允许对类型实例进行任何写入或更改,从而迫使用户创建自己的克隆?

或者是否有更好的方法来提供可用类型的列表?

谢谢,安迪

最佳答案

使您的自定义 Type 类不可变,与 System.Type 相同,您不必担心。最终用户可以获取它想要的所有数据,但他不能以任何方式修改对象。

编辑:不可变类的例子

以下面的类为例:

public class ImmutablePerson
{
private readonly string name; //readonly ensures the field can only be set in the object's constructor(s).
private readonly int age;

public ImmutablePerson(string name, int age)
{
this.name = name;
this.age = age;
}

public int Age { get { return this.age; } } //no setter
public string Name { get { return this.name; } }

public ImmutablePerson GrowUp(int years)
{
return new ImmutablePerson(this.name, this.age + years); //does not modify object state, it returns a new object with the new state.
}
}

ImmutablePerson 是一个不可变类。一旦创建,消费者就无法以任何方式修改它。请注意,GrowUp(int years) 方法根本不修改对象的状态,它只是返回具有新值的 ImmutablePerson 的新实例。

我希望这可以帮助您更好地理解不可变对象(immutable对象),以及它们如何在您的特定情况下为您提供帮助。

关于c# - 在 C# 中提供类的只读列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6264563/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com