C#对象修改我认为这真的是一个非常蹩脚的问题,但我想我会比谷歌自己得到更好的答案:)假设我有一个构造函数类:公共类TestClass{私有只读IRepository存储库;publicTestClass(IRepositoryrepository){this.repository=repository;//这是不明显的行-它调用了一些//方法,这改变了//存储库对象的内部内容。repository.AddSomething(...);现在:IRepositorysqlRepository=newSqlRepository(...);TestClasstestClass=newTestClass(sqlRepository);1)我不擅长传递C#值/引用-所以请有人可以逐步解释在这种情况下会发生什么。2)sqlRepository对象是否被修改(我假设没有)并且TestClass的构造函数是否有修改它的方法(我知道这是邪恶的,请告诉我)?3)构造函数中的repository.AddSomething(...)和this.repository.AddSomething(...)行是否具有相同的效果?为什么?4)在这个例子中,readonly对更改存储库的尝试有什么影响?在这种情况下,对sqlRespository的引用将传递给构造函数。还没有。当您调用AddSomething()时,该方法确实在修改原始实例。我们仍然只有一个物体,每个人都在触摸那个物体。这是一个重要的区别,因为每个人都有对同一对象的引用,因此他们所做的任何更改都将对该对象进行。但是如果他们只是用不同的对象覆盖那个变量,那么它只能在本地工作。请记住,变量就像插槽。我们可以有许多槽都指向同一个对象,但是用指向另一个对象的指针替换一个槽不会影响其他槽。如果您首先设置this.repository=repository那么名为repository的本地参数和名为repository的成员变量(字段)将保存对同一对象的引用。我们用这个。需要明确的是,我们指的是成员变量(字段)而不是局部参数或变量。readonly意味着成员变量/字段只能从构造函数中分配。将成员变量视为可以放置对象的插槽。如果一个槽是只读的,这意味着它只能在ctor调用期间被填充。之后无法更换。这并不意味着其中的对象在某种程度上是“只读的”。该对象仍然可以修改,只是不能被另一个对象替换。以上就是《C#学习教程:C#对象修改与分享》的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
