Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何用c编写一个不可更改的类?_C#_Readonly - Fatal编程技术网

C# 如何用c编写一个不可更改的类?

C# 如何用c编写一个不可更改的类?,c#,readonly,C#,Readonly,我正在写一个包含函数、属性和文本的类 我希望使用我的类的每个人都能看到函数、文本和属性,但不能更改它们 首先怎么做 在advanced中,我希望他们可以添加一些其他函数、文本和属性,但不能更改我编写的现有函数 下一步怎么做 更新 有一个类包含CRUD函数。它是由我编写的代码生成器创建的。现在人们可以添加创建的类并使用其函数来执行CRUD函数。我不想让它尽可能地成为一个dll文件,也不想让整个类尽可能地成为只读的。我只是希望当人们在他们的项目中包含创建的类时,他们可以向其中添加另一个函数,但他们不

我正在写一个包含函数、属性和文本的类

我希望使用我的类的每个人都能看到函数、文本和属性,但不能更改它们

首先怎么做

在advanced中,我希望他们可以添加一些其他函数、文本和属性,但不能更改我编写的现有函数

下一步怎么做

更新


有一个类包含CRUD函数。它是由我编写的代码生成器创建的。现在人们可以添加创建的类并使用其函数来执行CRUD函数。我不想让它尽可能地成为一个dll文件,也不想让整个类尽可能地成为只读的。我只是希望当人们在他们的项目中包含创建的类时,他们可以向其中添加另一个函数,但他们不能更改或删除代码生成器生成的函数。

您可以将您的类编译为.dll,以便其他用户可以将其添加到他的项目中,而不能更改它。他还可以进行继承并添加自己的方法,而无需更改父类。

您可以将此属性和方法设置为密封的,这实际上取决于您的需要

有时间阅读C修饰语

将您的类作为基类,或者创建一个接口/抽象类,让其他人继承它,他们可以添加函数/属性/方法,但您所做的一切都是原样,除非它是虚拟的

我只是希望当人们在他们的项目中包含创建的类时,他们可以向其中添加另一个函数,但不能更改或删除代码生成器生成的函数

不幸的是,您不能这样做,一旦您分发代码,开发人员就可以完全控制它。无论如何,通常不建议修改生成的代码,但是,如果您的代码包含bug或不兼容,并且需要调整,那么它实际上会对您有利

最好的方法是将生成的代码类部分化,这样可以更容易地进行扩展

namespace My.Generated.Code
{
    public partial class GeneratedClass
    {
        ...
    }
}
...

namespace Some.Other.Project
{
    using My.Generated.Code;

    public partial class GeneratedClass
    {
        public string NewProperty { get; set; }

        public void NewMethod()
        {
        }
    }
}

只要您不将生成的类中的任何属性设置为虚拟,那么开发人员就可以添加新的行为/属性,但不能修改现有的属性。

查看访问修饰符:什么是文本?什么是不更改它们,您是指更改属性的值还是指重写属性和方法?这取决于您打算如何分发代码?如果您将其作为DLL提供,则用户无法更改您的代码,但如果您允许,当然可以从现有类派生。显示您现在拥有的代码。基于此,人们可能会给你一些有用的评论。我们没有足够的信息来为您编写类。这通常不是一个首先不能用代码完全解决的问题。这是一个“如何使用这个类”的问题。但是不管怎样:只要写一个没有任何虚拟的普通类,并用“sealed”关键字标记它-你就尽可能接近了。看到OP的更新,他们不想把它作为DLL提供-它是一个自动生成的类。非常感谢你,但是我可以根据你的经验问一个与编程无关的问题吗?我怎样才能说服一个不懂编程的老板,让他知道代码生成器是件好事,当我们都知道它不被推荐的时候,我又怎么能强迫很多人去做呢?@HamidReza编写代码生成器并不是一个坏主意,很多应用程序/工具都有并特别使用它们。我想问题是你真的需要吗?你需要说服你的老板你不需要的原因,这并不是我能帮你的,因为我不知道你的应用程序和它的用途。是的,但他想要的是一个代码生成器,它生成模型和存储库层,并将它们的类库作为dll文件,没有人可以更改它们。这意味着在完成代码生成器项目后,我们的其他项目在其存储库、模型和应用程序类库中只有一个dll,而没有其他内容。从各个角度来看,他的想法都很弱,但…@HamidReza听起来你根本不需要代码生成器。。。事实上,听起来你的老板好像把一个可重用的库和一个每次都能生成代码的代码生成器混淆了。我认为你完全达到了目标。