Tag: new operator

从锯齿状数组初始化中省略c#new

来自: http : //msdn.microsoft.com/en-us/library/2s05feca.aspx 请注意,您不能从元素初始化中省略new运算符,因为元素没有默认初始化: int[][] jaggedArray3 = { new int[] {1,3,5,7,9}, new int[] {0,2,4,6}, new int[] {11,22} }; 这是什么意思? 为什么可以省略新的: int[] arrSimp = { 1, 2, 3 }; int[,] arrMult = { { 1, 1 }, { 2, 2 }, { 3, 3 } }; 但不可能: int[][,] arrJagg = {new int[,] { { 1, […]

C#Regex匹配包含新行的标签之间的任何文本

这是我的正则表达式: \[\[START\]\]\[\[OK\]\](.*?)\[\[END\]\] 我想获得[[START]][[OK]]和[[END]]包含的任何文字。 但是,当我的文本包含一些\r\n字符时,我的正则表达式与它不匹配。 它怎么能使它工作?

隐藏(使用“new”修饰符)接口方法声明的目的是什么?

可以将接口中的方法声明标记为“ new ”,但它是否具有任何“技术”意义,或者它只是一种明确声明声明不能覆盖前一个声明的方法? 例如 : interface II1 { new void F(); } interface II2 : II1 { new void F(); } 是有效的(C#4.0编译器不会抱怨)但似乎与以下内容不同: interface II1 { void F(); } interface II2 : II1 { void F(); } 提前感谢您提供任何信息。 编辑:你知道一个隐藏在界面中会有用的场景吗? 编辑:根据这个链接: 方法隐藏是一个好主意 (谢谢斯科特),最常见的情况似乎是协变返回类型的模拟。

C#vs C ++中的新操作符

来自C ++,我对在C#中使用new关键字感到困惑。 我知道它不像C ++的new那样你不必手动控制对象的生命周期,因为C#有垃圾收集。 但是,当阅读其他人的C#代码时,我会注意到代码片段1中的语句。如果在代码片段2中完全避免使用new会不会容易得多? 片段1 Foo fooInstance = new Foo(); 片段2 Foo fooInstance; 我的问题是,代码段1和代码段2之间有什么区别,为什么我更喜欢一个呢?

在C#中使用’new’修饰符

我读到new修饰符隐藏了基类方法。 using System; class A { public void Y() { Console.WriteLine(“AY”); } } class B : A { public new void Y() { // This method HIDES AY // It is only called through the B type reference. Console.WriteLine(“BY”); } } class Program { static void Main() { A ref1 = new A(); // Different […]

函数的“静态新”修饰符有什么意义?

今天,我在遗留代码中找到了一些东西。 它具有一个function的“静态新”。 看起来像这样。 class Foo { public static void Do() { Console.WriteLine(“Foo.Do”); } } class Bar: Foo { public static new void Do() { Console.WriteLine(“Bar.Do”); } } 我不理解类Bar中的Do方法的静态new修饰符。 在C#中,只能使用类名而不是对象名来调用静态方法。 因此,我认为拥有“新”与否之间没有任何区别。 通常,如果不需要某些语法,C#只会将其视为错误。 任何人都知道为什么C#允许这样的语法?

要“新”还是不要“新”

在使用new关键字时是否遵循经验法则,何时在声明对象时不遵循? List listCustClass = GetList(); 要么 List listCustClass = new List(); listCustClass = GetList();

为什么要使用`new`隐藏方法?

可能重复: C# – 方法签名中的新关键字 假设我有3个class:GrandDad,爸爸,儿子。 儿子inheritance自祖父,inheritance自祖父。 每个类都实现了foo。 // GrandDad class: public virtual void foo() // Dad class: new public virtual void foo() // Son class: public override void foo() 我不明白为什么爸爸会使用新关键字的原因。 据我所知,使用新隐藏方法。 你为什么想做这个? 我阅读了新的MSDN解释,但讨论只是机械的,而不是架构的。 谢谢

反转CRC32

我找到了一个代码来反转CRC32,但我不知道它是如何工作的,因为我在编程方面不是那么好,我刚刚开始。 我只想比较2个文件,旧的和新的,然后在新修复CRC32在文件的末尾添加4个字节,因此2个文件将具有相同的CRC32。 这是代码,在C#中: public class Crc32 { public const uint poly = 0xedb88320; public const uint startxor = 0xffffffff; static uint[] table = null; static uint[] revtable = null; public void FixChecksum(byte[] bytes, int length, int fixpos, uint wantcrc) { if (fixpos + 4 > length) return; uint crc = startxor; for (int i = […]

您可以使用C#new关键字来扩展接口的属性吗?

我理解“new”关键字如何隐藏派生类中的方法。 但是,它对实现使用关键字的接口的类有什么影响? 考虑这个例子,我决定通过使其属性读/写来扩展接口。 public interface IReadOnly { string Id { get; } } public interface ICanReadAndWrite : IReadOnly { new string Id { get; set; } } 然后你就可以做到这样的事情: public IReadOnly SomeMethod() { // return an instance of ICanReadAndWrite } 这是不好的设计吗? 它会导致我的类实现ICanReadAndWrite的问题吗? 编辑:这是一个人为的例子, 说明为什么我可能想要做这样的事情: 假设我有一个返回IShoppingCartItemReadWrite的工厂类。 然后,我可以有一个服务层来操纵价格,更改东西等。然后,我可以将这些对象作为IShoppingCartItemReadOnly传递给某种不会改变它们的表示层。 (是的,我知道它在技术上可以改变它们 – 这是一个设计问题,而不是安全性等)