草庐IT

c# - 关键字 "new"对 C# 中的结构有何作用?

在C#中,结构是根据值来管理的,而对象是根据引用来管理的。根据我的理解,当创建类的实例时,关键字new导致C#使用类信息来创建实例,如下所示:classMyClass{...}MyClassmc=newMyClass();对于结构,您不是在创建对象,而只是将变量设置为一个值:structMyStruct{publicstringname;}MyStructms;//MyStructms=newMyStruct();ms.name="donkey";我不明白的是,如果通过MyStructms=newMyStruct()声明变量,这里的关键字new对声明做了什么?.如果struct不能是一

c# - "new"c# 属性声明中的关键字

我得到了一个要维护的.NET项目。我刚刚浏览了代码,我在属性声明中注意到了这一点:publicnewstringnavUrl{get{return...;}set{...}}我想知道new修饰符对属性有什么作用? 最佳答案 它隐藏了基类的navUrl属性。参见newModifier.如该MSDN条目中所述,您可以使用完全限定名称访问“隐藏”属性:BaseClass.navUrl。滥用任何一种都可能导致大量困惑和可能的精神错乱(即损坏的代码)。 关于c#-"new"c#属性声明中的关键字,

c# - Bitmap.Clone() 和 new Bitmap(Bitmap) 有什么区别?

据我所知,有两种复制位图的方法。Bitmap.Clone()BitmapA=newBitmap("somefile.png");BitmapB=(Bitmap)A.Clone();新位图()BitmapA=newBitmap("somefile.png");BitmapB=newBitmap(A);这些方法有何不同?我对内存和线程方面的差异特别感兴趣。 最佳答案 阅读之前的答案,我担心像素数据会在位图的克隆实例之间共享。所以我进行了一些测试以找出Bitmap.Clone()和newBitmap()之间的区别。Bitmap.Clone

c# - C# 中的 override 和 new 关键字有什么区别?

在类层次结构中定义方法时,C#中的override和new关键字有什么区别? 最佳答案 下一页很好地总结了您的问题。KnowingWhentoUseOverrideandNewKeywords总结覆盖:当基类的方法在派生类中被覆盖时,将使用派生类中的版本,即使调用代码“不知道”该对象是派生类的实例。New:如果您使用new关键字而不是override,派生类中的方法不会覆盖基类中的方法,它只是隐藏它。如果您既没有指定new也没有指定overrides,生成的输出与您指定new时的结果相同,但您还会收到编译器警告(因为您可能不知道您隐

c# - += new EventHandler(Method) 与 += 方法

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:C#:Differencebetween‘+=anEvent’and‘+=newEventHandler(anEvent)’订阅事件有两种基本方式:SomeEvent+=newEventHandler(MyHandlerMethod);SomeEvent+=MyHandlerMethod;有什么区别,什么时候我应该选择一个而不是另一个?编辑:如果是一样的,那么为什么VS默认为长版本,使代码困惑?这对我来说毫无意义。

C#: ' += anEvent' 和 ' += new EventHandler(anEvent)' 之间的区别

采用以下代码:privatevoidanEvent(objectsender,EventArgse){//somecode}下面的有什么区别?[object].[event]+=anEvent;//and[object].[event]+=newEventHandler(anEvent);[更新]显然,两者之间没有区别......前者只是后者的语法糖。 最佳答案 没有区别。在您的第一个示例中,编译器将自动推断您想要实例化的委托(delegate)。在第二个示例中,您显式定义了委托(delegate)。委托(delegate)推理是在

c# - virtual、override、new和sealed override的区别

我对OOP的一些概念很困惑:virtual、override、new和sealedoverride.谁能解释一下区别?我很清楚,如果要使用派生类方法,可以使用override关键字,这样基类方法将被派生类覆盖。但我不确定new和sealedoverride。 最佳答案 virtual关键字用于修改方法、属性、索引器或事件声明,并允许它在派生类中被覆盖。例如,这个方法可以被任何继承它的类覆盖:使用new修饰符显式隐藏从基类继承的成员。要隐藏继承的成员,在派生类中使用相同的名称声明它,并使用new修饰符对其进行修改。这一切都与多态性有关

c# - IEnumerable<对象> a = new IEnumerable<对象>();我可以这样做吗?

我想创建一个对象的新实例IEnumerable我可以这样做吗?IEnumerablea=newIEnumerable(); 最佳答案 例如,您可以创建List的实例,它实现了IEnumerable.示例:Listlist=newList();list.Add(1);list.Add(4);list.Add(5);IEnumerableen=list;CallFunction(en); 关于c#-IEnumerablea=newIEnumerable();我可以这样做吗?,我们在Stack

c# - 为什么我们需要 new 关键字,为什么默认行为是隐藏而不是覆盖?

我在看这个blogpost并有以下问题:为什么我们需要new关键字,是否只是为了指定隐藏基类方法。我的意思是,我们为什么需要它?如果我们不使用override关键字,我们不是隐藏了基类方法吗?为什么C#中的默认值是隐藏而不是覆盖?为什么设计师要这样实现? 最佳答案 好问题。让我重述一下。Whyisitlegaltohideamethodwithanothermethodatall?让我用一个例子来回答这个问题。你有一个来自CLRv1的接口(interface):interfaceIEnumerable{IEnumeratorGetE

c# - lock(new object()) -- cargo 崇拜或一些疯狂的 "language special case"?

我正在审查一位顾问编写的一些代码,虽然已经出现了数十个危险信号,但我无法理解以下代码片段:privatevoidfoo(){if(InvokeRequired){lock(newobject()){if(m_bar!=null)Invoke(newfooDelegate(foo),newobject[]{});}}else{if(OnBazChanged!=null)OnBazChanged();}}lock(newobject())在这里做什么?应该没有任何影响,因为它总是锁定另一个对象,但这种锁定在整个代码中都是持久的,即使在非复制和粘贴的部分也是如此。这是C#语言中的一些特殊情况