-
问题描述:在一个类里定义了另一个抽象类对象,在构造函数中使用new初始化抽象类对象报错:“无法创建抽象类或接口的实例”
public abstract class BInstrumentUnit { // 属性 } class TipParam { private BInstrumentUnit m_LoadUnit; // 加载单元 public BInstrumentUnit() { m_LoadUnit= new BInstrumentUnit(); // 报错 } }
-
解决方法
抽象类不能直接实例化,定义好抽象类的构造函数,TipParam 构造函数中直接将抽象类对象置空即可m_LoadUnit= null;
-
必须要创建抽象类对象,来调用函数
// 抽象类定义 public abstract class BInstrumentUnit : INotifyPropertyChanged { private bool m_bEnable; // 使能 Container m_UseContainer; // 容器单元,自定义类 private bool m_bUsingFlag; //正在使用标志位 private float m_fClampOffset; // 夹取位置偏移 private float m_fLidOffset; // 开盖位置偏移 private string m_strFacName; // 厂商名 private string m_strLoadTime; // 上料时间 private bool m_bHaveLid; // 是否有盖 private FPoint m_FOffset; // 偏移 } private Dictionary<string, BInstrumentUnit> m_dtUnitLib; //耗材库 foreach (var tmpInDt in m_dtUnitLib) { // 遍历循环m_dtUnitLib中Container与临时变量pContainer相等的对象 if (tmpInDt.Value.UseContainer == pContainer) { BInstrumentUnit pUnit = null; Type type = tmpInDt.Value.GetType(); object ob = null; // 使用指定类型的默认构造函数来创建该类的实例 ob = Activator.CreateInstance(type); pUnit = ob as BInstrumentUnit; // 自定义函数Clone(),进行数据复制 pUnit.UseContainer.Clone(pContainer); break; } }
以上创建抽象类对象的方法从实际项目中摘出,可能具有局限性,谨记录以便日后查阅,希望能给各位一点启发。
-
抽象类一般都做为基类,派生类对象是可以被创建的,因此可以创建派生类对象,再将其转化成基类,例如:
public class Liquid : BInstrumentUnit { private string m_strDefName; //自定义名 } Liquid myLiqid = new Liquid(); BInstrumentUnit myUnit = myLiquid as BInstrumentUnit;
c#无法创建抽象类或接口的实例
最新推荐文章于 2023-06-25 13:27:17 发布