Tag: const

在C#中混淆关于常量十进制字段的警告

我正在尝试使用const修饰符,同时探索大量的C#教程,并在这样的类中放置了一堆const修饰符,而不是在任何地方实际使用它们: class ConstTesting { const decimal somedecimal = 1; const int someint = 2; … } 有了这个类,我收到以下警告(使用csc): ConstTesting.cs(3,19):警告CS0414:分配了字段’ConstTesting.somedecimal’但它的值从未使用过 我不明白的是我只得到const decimal的警告。 无论顺序或类似的东西, const int都不会给我任何警告。 我的问题是,为什么会发生这种情况? 为什么我的csc编译器会首先警告我一个const ,如果更重要的是, 为什么当我以完全相同的方式编写const int时它只会警告我const decimal ? 究竟什么是int和decimal之间的区别呢? 请注意: – 我没有ReSharper – 我正在使用VS 2010 – 我100%肯定我的代码中的任何地方都没有使用`const`。

命名局部常量:UpperCamelCase或lowerCamelCase?

您对C#中的 局部常量使用哪种命名约定?为什么? const int Pi = 3; const int pi = 3; 似乎在较低的驼峰案例之间进行权衡,表明限制范围,而较高的驼峰案例更易读,更容易移到class级。 我注意到StyleCop更喜欢上骆驼箱。

在属性中使用int constant

任何人都可以解释为什么我不能在C#属性中使用const Int32? 例: private const Int32 testValue = 123; [Description(“Test: ” + testValue)] public string Test { get; set; } 使编译器说: “属性参数必须是常量表达式,……” 为什么?

根据值确定常量的名称

有没有办法从给定值确定常量的名称? 例如,给出以下内容: public const uint ERR_OK = 0x00000000; 如何获得“ERR_OK”? 我一直在寻找反思,但似乎无法找到任何有助于我的东西。

const与readonly

今天我发现了一篇文章,其中const字段称为编译时常量,而readonly字段称为运行时常量 。 这两个短语来自“Effective C#”。 我在MSDN和语言规范中搜索,找不到运行时常量 。 没有攻击性,但我不认为运行时常量是一个恰当的短语。 private readonly string foo = “bar”; 创建一个名为“foo”的变量,其值为“bar”,值为readonly,这里它是一个变量,没有constant业务。 只读变量仍然是变量,它不能是常量。 变量和常量是互斥的。 也许这个问题太过分了,我还是想听别人的意见。 你怎么看?

无法在类实例中读取const?

当编译器抱怨这个时,我有点意外: public class UsefulClass { public const String RatingName = @”Ratings\rating”; } public class OtherClass { public void SomeFunc() { UsefulClass useful = new UsefulClass(); String rating = useful.RatingName; } } 编译器说, “无法使用实例引用访问静态成员;而是使用类型名称限定它” 这不是问题, String rating = UsefulClass.RatingName; 工作良好。 我只是好奇这背后的想法是什么? 我有一个带有公共常量的公共类的实例,为什么我不能以这种方式获取数据?

C#中私有const和私有只读变量之间有区别吗?

在C#中使用private const变量或private static readonly变量之间是否有区别(除了必须为const分配编译时表达式)? 由于它们都是私有的,因此没有与其他库的链接。 它会有什么不同吗? 例如,它可以产生性能差异吗? 实习字符串? 有什么相似的吗?

为什么C#不支持类/方法级别的const?

我一直想知道为什么C#不支持类或方法级别的const 。 我知道Jon Skeet长期以来一直希望支持不变性,并且我认为使用函数const的C ++语法可以帮助实现这一点。 通过在类级别添加const关键字,我们将获得全面支持。 现在,我的问题是,C#团队没有开发出这种支持的原因是什么? 我想可以通过编译时检查或通过属性创建所有内容,而无需更改CLR。 我不介意代码能够通过reflection覆盖const行为。 想象一下: const class NumberContainer { public int Number { get; } } ..这样的类只能在构造时填充,所以我们需要一个构造函数来接受一个int。 另一个例子是方法级别的const: public int AddNumbers(NumberContainer n1, NumberContainer n2) const { return n1.Number + n2.Number; } const级方法不应该能够改变它们自己的类中的状态或传递给它们的引用类型的实例。 此外,const级函数只能在其范围内调用其他const级函数。 我不确定lambdas和代表是否会使一切都太难(或不可能)实现,但我确信有更多语言和编译器设计经验的人可以告诉我。 正如Steve B在评论中指出的那样, readonly的存在使得事情变得更复杂,因为const和readonly在runtime期间接近相同,但是在编译时不能确定readonly值。 我想我们可以有const和readonly级别,但这可能太混乱了? 那么,没有实现这个的原因是什么? 可用性问题(理解C ++中的常量通常对新用户来说很难),语言设计问题(无法完成)或仅仅是优先级问题(不变性的时代 – 嗡嗡声已经结束)。

静态只读与const – 不同的assemblyPOV?

关于这个问题有很多问题,但是没有(除了一个,但仍然是一个短的 )处理以下场景。 来自C#4书: 马克还写道: 如果更改const的值,则需要重建所有客户端 题 : 1)为什么? static readonly和static吗? 2)实际值保存在哪里 ? 3)如何使一个字段static readonly实际上solve “幕后”这个问题?

C#的只读(“const”式)函数参数

来自C ++背景,我习惯于将const关键字粘贴到函数定义中,以使对象以只读值传递。 但是,我发现在C#中这是不可能的(如果我错了请纠正我)。 经过一些谷歌搜索后,我得出的结论是,制作只读对象的唯一方法是编写一个只有’get’属性并将其传递给的接口。 优雅,我必须说。 public interface IFoo { IMyValInterface MyVal{ get; } } public class Foo : IFoo { private ConcreteMyVal _myVal; public IMyValInterface MyVal { get { return _myVal; } } } 我会把它传递给: public void SomeFunction(IFoo fooVar) { // Cannot modify fooVar, Excellent!! } 这可以。 但是,在我的其余代码中,我想正常修改我的对象。 向接口添加“set”属性会破坏我的只读限制。 我可以为Foo (而不是IFoo )添加一个’set’属性,但是签名需要一个接口而不是一个具体的对象。 我不得不做一些铸造。 // Add […]