为什么我们需要在C#中装箱和拆箱?
我知道拳击和拆箱是什么,但我无法理解它的实际用途.我应该在哪里以及在哪里使用它?
short s = 25;
object objshort = s; //Boxing
short anothershort = (short)objshort; //Unboxing
Run Code Online (Sandbox Code Playgroud) 我有一个IEntity接口
public interface IEntity{
bool Validate();
}
Run Code Online (Sandbox Code Playgroud)
我有一个实现此接口的类Employee
public class Employee : IEntity{
public bool Validate(){ return true; }
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我有以下代码
Employee emp1 = new Employee();
IEntity ent1 = (IEntity)emp1; // Is this a boxing conversion?
Run Code Online (Sandbox Code Playgroud)
如果它不是拳击转换那么演员是如何工作的?
当使用MVVM和Prism时,我发现自己进行了大量的转换,因为大多数参数都是接口
防爆
public void AddCrSubSystemsToPlant(IPlantItem plantItm, CRArticleItem crItm)
{
OSiteSubSystem itm = (OSiteSubSystem)crItm;
itm.PartData.Order = ((OSiteEquipment)plantItm).SubSystems.Count() + 1;
((OSiteEquipment)plantItm).SubSystems.Add(itm);
}
Run Code Online (Sandbox Code Playgroud)
要么
public void DeletePart(IPlantItem plantItem)
{
IEnumerable<IPlantItem> itmParent = GetParentPartByObjectId(_siteDocument, plantItem);
if (plantItem is OSiteEquipment)
((ObservableCollection<OSiteEquipment>)itmParent).Remove((OSiteEquipment)plantItem);
if (plantItem is OSiteSubSystem)
((ObservableCollection<OSiteSubSystem>)itmParent).Remove((OSiteSubSystem)plantItem);
if (plantItem is OSiteComponent)
((ObservableCollection<OSiteComponent>)itmParent).Remove((OSiteComponent)plantItem);
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,涉及的费用是多少.如果避免,这些操作是否会耗费大量内存或CPU.
任何意见?