Tag: 拳击

Box和UnBox是什么意思?

可能重复: 为什么我们需要在C#中装箱和拆箱? 什么是拳击和拆箱,有什么权衡? 在C#中,doe sit意味着什么:“Box and UnBox”? 这里是我创建Text的MSDN的摘录。 但这种便利需要付出代价。 添加到ArrayList的任何引用或值类型都隐式地向上转换为Object。 如果项目是值类型,则在将它们添加到列表时必须将它们装箱,并在检索它们时取消装箱。 铸造,装箱和拆箱操作都会降低性能; 在必须迭代大型集合的情况下,装箱和拆箱的效果可能非常显着。 谢谢!

将盒装对象转换回原始类型

我希望有两个答案中的一个,要么不可能,要么非常简单,我忽略了明显的Google查询。 潜在的问题是我有一个通用对象通过EventHandler传入,它装入对象并模糊真实类型; 只有在运行时我才知道对象是什么。 不可否认, dynamic关键字可以解决这个问题,但我想不要失去智能感知,如果我可以避免它。 另外,它没有解决不知道通用对象的每个属性没有大量reflection的情况。 编辑:我们的想法是能够确定方法参数中对象的真实类型,然后在不事先知道的情况下将该对象转换为真实类型。 这只是一个简化的例子。 盒装可能是错误的术语。 一个例子: public class Program { static void Main(string[] args) { var container = new Container( new Containee { Property1 = Guid.NewGuid(), Property2 = “I’m a property!”, Property3 = DateTime.Now } ); var boxed = (object)container; var originalType = boxed.GetType(); // DOES NOT COMPILE: would like an […]

Enum拳击和平等

为什么返回False public enum Directions { Up, Down, Left, Right } static void Main(string[] args) { bool matches = IsOneOf(Directions.Right, Directions.Left, Directions.Right); Console.WriteLine(matches); Console.Read(); } public static bool IsOneOf(Enum self, params Enum[] values) { foreach (var value in values) if (self == value) return true; return false; } 而这会返回True吗? public static bool IsOneOf(Enum self, params Enum[] […]

拳击与拆箱

我最近的另一个C#面试问题是,如果我知道Boxing和Unboxing是什么。 我解释了堆上的值类型和Heap上的引用类型。 当一个值转换为引用类型时,我们将其称为装箱,反之亦然。 然后他让我算一算: int i = 20; object j = i; j = 50; 我是什么人? 我把它搞砸了,并说50,其实际为20.现在我想明白为什么,但是当我玩不同的组合时,我很惊讶地看到这个: Object a = 1; // Boxing Object b = a; // referencing the pointer on stack to both objects on heap a = 2; // Boxing 我期待看到b == 2 ,但事实并非如此,为什么? 是因为第二次拳击会破坏并替换堆上的整个对象吗? 因为如果我这样做,那很好: public class TT { public int […]

比较没有拳击的平等结构

我遇到了一个适用于结构(SomeStruct)的扩展方法,并返回该值是否等于default(SomeStruct) (当调用无参数构造函数时)。 public static bool IsDefault (this T value) where T : struct { return (!EqualityComparer.Default.Equals(value, default(T))); } 这让我想知道结构是否被装箱。 这纯粹是出于好奇,因为根据上下文有拳击/传递值的优点/缺点。 假设: 以下第一种方法是非法的,因为结构不会隐式覆盖相等运算符==/!= 。 第二个“出现”以避免拳击。 第三种方法应该总是选中struct,因为它调用了object.Equals(object o) 。 第四个有两个可用的重载(object/T)所以我假设它也会避免装箱。 但是,目标结构需要实现IEquatable接口,这使得辅助扩展方法不是很有用。 变化: public static bool IsDefault (this T value) where T : struct { // Illegal since there is no way to know whether T implements the […]

是一个拳击转换界面?

我有一个IEntity接口 public interface IEntity{ bool Validate(); } 我有一个实现此接口的类Employee public class Employee : IEntity{ public bool Validate(){ return true; } } 现在,如果我有以下代码 Employee emp1 = new Employee(); IEntity ent1 = (IEntity)emp1; // Is this a boxing conversion? 如果它不是拳击转换那么演员是如何工作的?

当一个struct是一个struct时,using语句是什么时候用它的参数?

我对以下代码有一些疑问: using System; namespace ConsoleApplication2 { public struct Disposable : IDisposable { public void Dispose() { } } class Program { static void Main(string[] args) { using (Test()) { } } static Disposable Test() { return new Disposable(); } } } 我的问题是: 在Disposable结构上运行的using语句是否会从Test()框返回结构? 我怎样才能找到自己的答案? 为了试图找出自己,我检查了上面代码生成的IL,这里是Main(…)方法的IL: .method private hidebysig static void Main(string[] args) cil managed { […]

为什么Enum的HasFlag方法需要拳击?

我正在阅读“C#via CLR”和第380页,有一条说明如下: 注意Enum类定义HasFlag方法,定义如下 public Boolean HasFlag(Enum flag); 使用此方法,您可以重写对Console.WriteLine的调用,如下所示: Console.WriteLine(“Is {0} hidden? {1}”, file, attributes.HasFlag(FileAttributes.Hidden)); 但是,我建议您出于这个原因避免使用HasFlag方法: 由于它采用了Enum类型的参数,因此传递给它的任何值都必须装箱,这需要内存分配 。“ 我无法理解这个粗犷的陈述 – 为什么“ 您传递给它的任何值都必须装箱 flag参数类型是Enum ,这是一个值类型,为什么会有拳击? “传递给它的任何值必须装箱”应该意味着当你将值类型传递给参数Enum flag时会发生装箱,对吧?

将结构体转换为通用接口时是否存在Boxing / Unboxing?

可能重复: 结构,接口和拳击 来自MSDN: http : //msdn.microsoft.com/en-us/library/yz2be5wk.aspx Boxing是将值类型转换为类型对象或由此值类型实现的任何接口类型的过程。 但是通用接口呢? 例如, int派生自IComparable和IComparable 。 假设我有以下代码: void foo(IComparable value) { /* etc. */ } void bar(IComparable value) { /* etc. */ } void gizmo() { int i = 42; bar(i); // is `i` boxed? I’d say YES foo(i); // is `i` boxed? I fear it is (but I hope […]

具有引用类型变量的对象类型装箱

拳击是指将值类型分配给对象类型。 将引用类型分配给对象时是否相同? 如果分配了一个类型(不是对象),会发生什么? 那个拳击呢? int num=5; object obj = num; //boxing ////////////////////// MyClass my = new MyClass(); object obj = my; //what is name this convert (whethere is boxing?)