相关疑难解决方法(0)

为什么C#中不允许使用const参数?

对于C++开发人员来说,它看起来很奇怪 在C++中,我们用来标记参数,const以确保它的状态不会在方法中改变.还有其他C++特定的原因,比如const ref为了传递ref而传递,并确保状态不会被更改.但是为什么我们不能在C#中标记为方法参数const?

为什么我不能像下面那样声明我的方法?

    ....
    static void TestMethod1(const MyClass val)
    {}
    ....
    static void TestMethod2(const int val)
    {}
    ....
Run Code Online (Sandbox Code Playgroud)

c# language-agnostic language-design

98
推荐指数
5
解决办法
3万
查看次数

如何在C#中传递const引用?

在C++中,传递const引用是一种常见的做法 - 例如:

#include <iostream>
using namespace std;

class X
{
  public :
    X()                              {m_x = 0; }
    X(const int & x)                 {m_x = x; }
    X(const X & other)               { *this = other; }
    X & operator = (const X & other) { m_x = other.m_x; return *this; }
    void print()                     { cout << m_x << endl; }
  private :
    int m_x;
};

void main()
{
    X x1(5);
    X x2(4);
    X x3(x2);
    x2 = x1;
    x1.print();
    x2.print();
    x3.print();
} …
Run Code Online (Sandbox Code Playgroud)

c# const reference

15
推荐指数
4
解决办法
3万
查看次数

如何在C#中实现const-correctness?

可能重复:
C#中的"const correctness"

我已经编写了很多年的C++,但对C#来说还是比较新的.在学习C#时,我发现const关键字的使用比C++更有限.例如,AFAIK 没有办法向函数const声明参数.我觉得我可能无意中改变我的函数参数(可能是复杂的数据结构),我只能通过测试来检测,这让我感到很不舒服.

你是如何处理这种情况的?

c# c++ const-correctness

11
推荐指数
1
解决办法
4328
查看次数

C#中的Const函数参数

可能重复:
C#的只读("const"式)函数参数
为什么C#和const参数中没有const成员方法?

在过去使用C++编程时,我记得我们可以在方法中创建一个常量引用/指针参数.

如果我的记忆是正确的,则下面的意思是该方法不能改变参考,并且参考本身是一个常量参考.

C++示例

void DisplayData(const string &value) const
{
   std::count << value << endl;
}
Run Code Online (Sandbox Code Playgroud)

C#中是否存在类中方法的等价物?

我问的原因是,我试图通过引用传递一个对象(速度),同时不希望任何人改变它.

c#

9
推荐指数
1
解决办法
2万
查看次数

为什么C#不是用变量和方法的'const'设计的?

可能重复:
C#中的"const correctness"

我怀疑constC#规范简化了一般语言的简单性.是否有一个特定的原因我们不能const像C++那样声明变量引用或方法?例如:

const MyObject o = new MyObject();  // Want const cast referenece of MyObject
o.SomeMethod();    // Theoretically legal because SomeMethod is const
o.ChangeStuff();   // Theoretically illegal because ChangeStuff is not const

class MyObject 
{
   public int val = 0;

   public void SomeMethod() const 
   {
      // Do stuff, but can't mutate due to const declaration.
   }

   public void ChangeStuff() 
   {
      // Code mutates this instance.  Can't call with const reference.
      val++;
   }
}
Run Code Online (Sandbox Code Playgroud)

c# const

8
推荐指数
1
解决办法
370
查看次数

具有丰富类型的C#中的const正确性

来自C++背景并尝试学习C#,我遇到的最令人沮丧的语言遗漏之一就是const关键字.

所以,我一直试图找到一种可以用来在C#中实现const正确性的模式.

这个答案有一个有趣的建议:为你的所有类型创建一个只读界面.但正如Matt Cruikshank在评论中指出的那样,如果你的班级有收藏品或其他丰富类型,这就成了问题.特别是如果您无法控制类型,并且无法使其实现只读接口.

是否存在可以处理丰富类型和集合的任何模式或解决方案,或者我们是否强制在C#中进行复制?在C#中完全放弃const正确性是否更好?

.net c# const const-correctness readonly

8
推荐指数
1
解决办法
476
查看次数

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

我正在为一群人编写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]
    }
}
Run Code Online (Sandbox Code Playgroud)

c# performance

1
推荐指数
2
解决办法
133
查看次数