草庐IT

new_order

全部标签

c# - 实现接口(interface)包括 throw new NotImplementedException ... 为什么?

我正在使用VS2017Community,它昨天刚刚收到更新。今天我想实现一个接口(interface),现在实现看起来像这样:publicstringCity{get=>thrownewNotImplementedException();set=>thrownewNotImplementedException();}而不是这个(我所期望的):publicstringCity{get;set;}为什么会这样?不确定这是否特定于C#7或VS或其他。我只知道接口(interface)的自动实现在过去一周左右发生了变化。我的界面:publicinterfaceIMyInterface{str

c# - 用 new 实例化枚举有什么用吗?

当您使用new实例化enum时,C#的编译器不会报错:enumFoo{Bar}Foox=newFoo();x将是一个Foo,值为Bar。newFoo()有什么我不知道的用途吗?或者我只是装箱并立即拆箱枚举值? 最佳答案 newT(),当T为值类型时,不是装箱操作。它与default(T)相同。Foox=newFoo();、Foox=default(Foo)和Foox=Foo.Bar;都完全按照同样的事情。Reference:InitializingValueTypesintmyInt=newint();–or–intmyInt=0;

c# - 将 double 转换为 decimal 还是从 double 构造 "new"decimal 更好?

当从double转换为小数时,假设我的double可以表示为decimal...将double转换为小数是否更合适:(ExplicitNumericConversionsTable)(请注意,此条目错误地与前者相矛盾!)doublefoo=bar;decimalfoobar=(decimal)foo;还是调用decimal构造函数更合适:(DecimalConstructor)doublefoo=bar;decimalfoobar=newdecimal(foo);我倾向于使用decimal构造函数,但我想知道使用其中一个与另一个的原因。据我所知,唯一的区别是Decimal.MinVal

c# - 函数的 "static new"修饰符有什么意义?

今天,我在遗留代码中发现了一些东西。它具有一项功能的“静态新”。看起来像这样。classFoo{publicstaticvoidDo(){Console.WriteLine("Foo.Do");}}classBar:Foo{publicstaticnewvoidDo(){Console.WriteLine("Bar.Do");}}我不明白类Bar中Do方法的staticnew修饰符。在C#中,静态方法只能用类名调用,不能用对象名调用。所以,我认为拥有"new"与没有"new"之间没有任何区别。一般情况下,如果某些语法是不必要的,C#只是将其视为错误。有人知道为什么C#允许这种语法吗?

c# - Dictionary.Clear 和 new Dictionary() 的区别

C#中Dictionary.Clear和newDictionary()之间的主要区别是什么?在哪些情况下推荐使用哪一种? 最佳答案 Dictionary.Clear()将删除字典中的所有KeyValue对。执行newDictionary()将创建一个新的字典实例。当且仅当旧版本的字典未被另一个引用作为根时,创建新字典将使整个字典及其内容(未在其他地方作为根)可供GC清理。Dictionary.Clear()将使KeyValue对可用于清理。在实践中,这两个选项往往会产生非常相似的效果。区别在于在方法中使用this时会发生什么:voi

c# - 在哪里以及为什么使用 int a=new int?

只是好奇,有什么区别:intA=100;和intA=newint();我知道new用于在堆上分配内存..但我真的不明白这里的上下文。 最佳答案 staticvoidMain(){intA=newint();intB=default(int);intC=100;Console.Read();}编译为.methodprivatehidebysigstaticvoidMain()cilmanaged{.entrypoint//Codesize15(0xf).maxstack1.localsinit([0]int32A,[1]int32B,

c# - C# 中 'new' 的性能成本?

在C#中,使用new关键字的性能成本是多少?我特别询问与游戏开发有关的问题,我知道在C++中,每个更新周期都绝对不能成为新事物。这同样适用于C#吗?我正在使用XNA并为移动设备开发。真的只是问一个优化问题。 最佳答案 new的成本分为三个部分:分配内存(如果是值类型可能不需要)运行构造函数(取决于你在做什么)垃圾收集成本(同样,如果它是值类型,这可能不适用,具体取决于上下文)如果不在主代码中创建任何新对象,就很难以惯用的方式使用C#...尽管我敢说尽可能多地重用对象是可行的。尝试使用一些真实的设备,看看您的游戏表现如何。我当然同意像

c# - 为什么我们在初始化字符串时不使用 new 运算符?

我在面试中被问到这个问题:字符串是引用类型还是值类型。我说的是引用类型。然后他问我为什么我们在初始化字符串时不使用new运算符?我说是因为c#语言具有更简单的创建字符串的语法,并且编译器会自动将代码转换为对System.String类的构造函数的调用。这个答案是否正确? 最佳答案 字符串是不可变的引用类型。有ldstr允许将新对象引用推送到字符串文字的IL指令。所以当你写:stringa="abc";编译器测试"abc"文字是否已经在元数据中定义,如果没有则声明它。然后它将这段代码翻译成以下IL指令:ldstr"abc"这基本上使a

C# 现有对象上的 'new' 关键字

我想知道一旦对象的引用被重新分配,对象(在C#中)会发生什么。示例:Carc=newCar("RedCar");c=newCar("BlueCar");由于引用被重用,垃圾收集器是否会在丢失引用后处置/处理“红色汽车”?或者是否需要实现单独的方法来处理“红色汽车”?我想知道的主要是因为我要回收一个相对较大的对象,并且需要知道在重新创建它时是否应该做任何事情。 最佳答案 在您的示例中,当c分配给BlueCar时,c的RedCar实例将有资格进行垃圾回收。您无需执行任何操作。查看这篇关于.NET垃圾收集器的(旧的,但仍然相关的)MSDN

c# - .NET 字典 : get or create new

我经常发现自己创建了一个Dictionary具有非平凡的值类(例如List),然后在填充数据时始终编写相同的代码模式。例如:vardict=newDictionary>();stringkey="foo";stringaValueForKey="bar";也就是我想插入"bar"到键"foo"对应的列表中,其中键"foo"可能没有映射到任何东西。这是我使用不断重复的模式的地方:ListkeyValues;if(!dict.TryGetValue(key,outkeyValues))dict.Add(key,keyValues=newList());keyValues.Add(aValu