首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

MethodInfo Invoke 未将对象引用设置到对象的实例?该怎么处理

2012-03-30 
MethodInfo Invoke 未将对象引用设置到对象的实例??C# codepublic abstract class AbstractService{public

MethodInfo Invoke 未将对象引用设置到对象的实例??

C# code
    public abstract class AbstractService    {        public abstract void Load();        public abstract Int32 Save();        public abstract object DataSource{ get; }    }    /// 数据服务的抽象化(数据服务的基类)    public abstract class AbstractServiceDS<TDataTable, TAdapter> : AbstractService         where TDataTable : DataTable, new()        where TAdapter : class, new ()    {        private TDataTable _table = null;        private TAdapter _adapter = null;        private MethodInfo _adMethodFill = null;        private MethodInfo _adMethodUpdate = null;        //        // 无参数构造函数        //         public AbstractServiceDS()        {            this._table = new TDataTable();            this._adapter = new TAdapter();            //初始化反射方法            this.InitReflectionMethods();        }        //        // 外部数据集的构造函数        //         public AbstractServiceDS(TDataTable table, TAdapter adapter)        {            this._table = table;            this._adapter = adapter;            //初始化反射方法            this.InitReflectionMethods();        }        //初始化反射方法        private void InitReflectionMethods()        {            try            {                Type typeAdapter = typeof(TAdapter);                this._adMethodFill = typeAdapter.GetMethod("Fill");                this._adMethodUpdate = typeAdapter.GetMethod("Update", new Type[]{ typeof(TDataTable) });            }            catch (System.Exception ex)            {                System.Console.WriteLine(ex.Message);                            }        }        public override void Load()        {            object[] args = new object[] { this._table };            _adMethodFill.Invoke(this._adapter, args);        }         //重写保存的虚方法             public override int Save()        {            int nRows = 0;            try            {                object[] args = new object[] { this._table };                nRows = (int)_adMethodUpdate.Invoke(this._adapter, args);//在这就跑出“未将对象引用设置到对象的实例? ”                this._table.AcceptChanges();                            }            catch (System.Exception ex)            {                System.Console.WriteLine(ex.Message);            }            return nRows;        }        public override object DataSource        {            get { return this._table; }        }        public TAdapter Adapter        {            get { return this._adapter; }            protected set { this._adapter = value; }        }    }}


我刚刚学c# 请前辈赐教

[解决办法]
自己 debug 一下吧。

this.InitReflectionMethods(); 里的

 this._adMethodUpdate = typeAdapter.GetMethod("Update", new Type[]{ typeof(TDataTable) });

估计没有取到 Update 方法啊。
[解决办法]
加一下BidingFlags试下。

热点排行