c# - 我可以阻止用户修改C#中的参数吗

标签 c# performance

我正在为一群人使用 C# 编码,我正在设计要编码的方法的签名,我需要一种方法来确保人们不会修改他们将收到的某些参数。 他们接收大结构,因此通过引用发送,但我希望他们在不修改原始值的情况下使用数据。但由于结构很大,我们不想复制它们。

我们可以假设他们不想更改数据,我们只需要保护他们不犯错误。

C# 提供了哪些解决方案?

这是一个例子

class MyDataBlok {
    List<double> samples;
    int someParams;
    double lots of other params
    }

class MySetOfDataBlock
{
    List<MyDataBlock> DataSet;
    bool SomeParam;
    Double lots of other params;
}

class MethodsToBeCoded
{
    ProcessSetOfData( /*some tag defining data as protected*/ MySetOfDataBlock data)
    {
         //Here I want code that uses data without modifying data
         // nor the content on any data.DataSet[i]
    }
}

最佳答案

悲观的答案是。如果他们想要更改数据,他们。除了复印,您无能为力。


乐观的答案是假设他们不想更改数据,而您只需要保护他们免于犯错。现在这是可能的:

不要给他们任何二传手。你没有说你的数据是什么样的,所以我只能给你一个模糊的描述:

不要暴露二传手。为它们提供没有 setter 的数据类接口(interface),返回集合为 IEnumerable<>而不是可修改的实例,等等。确保通过他们获取您的数据的接口(interface),您的数据不能被修改。

关于c# - 我可以阻止用户修改C#中的参数吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41870297/

相关文章:

c# - 从字符串列表中获取匹配的枚举 int 值

algorithm - 忽略样式偏好,拥有一个强大的循环与许多轻量级循环相比有什么优势吗?

c - int 与短向量化

c# - 我应该重复使用点和矩形还是创建新的?

java - 有效的 Java - 尽管创建了多个实例,但方法调用时间相同

c# - 通过 BinaryFormatter 反序列化 MemoryStream

c# - 使用 Html helper HiddenFor C# MVC 将模型添加到模型中

Mysql插入,更新很慢

c# - 四舍五入到 c# 中最接近的 10 位

c# - ASP.NET 产品网站的路由规则