首先,看类定义: Persons为一个实体类。
public class IMSDB
{
public DBSet<Person> Persons { get; set; }
}
public class DBSet<TEntity>
{
public bool Del(int id)
{
return true;
}
}
在调用的地方:
IMSDB IMSDB = new IMSDB();
IMSDB.Persons.Del(1);
我想以IMSDB.Persons.Del(1);这种方式调用,但现在这种肯定不行,会说没有实例化。如果改成静态的,会报错:请改用类型名来限定它,我只想用IMSDB.Persons.Del调用而不加限定,请问用什么方法能实现这种调用方式?非常感谢。
举个EF中的例子吧,在MusicStore中
using System.Data.Entity;
public class MusicStoreEntities : DbContext
{
public DbSet<Album> Albums { get; set; }
public DbSet<Genre> Genres { get; set; }
}
调用的时候只需要
MusicStoreEntities obj = new MusicStoreEntities();
obj.Albums.Create();
Albums是普通的实体类,并没有实例化,也可以调用Create();方法,具体实现原理是什么呢?
解决了问题麻烦速速标记答案
using System;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
IMSDB imsdbObj = new IMSDB();
if (imsdbObj.Persons == null)
{
Console.WriteLine("大哥你的类成员还是没有被实例化,当然你往后的代码无从Call起");
}
//先实例化嘛!
imsdbObj.Persons = new DBSet<Person>();
if (imsdbObj.Persons != null)
{
Console.WriteLine("实例化后你就是大爷想怎Call就怎Call!!!");
}
int callCount = 1000;
for (int i = 1; i < callCount; i++)
{
Console.WriteLine(string.Format("我Call你{0}次,看你还报错? 目前第{1}", callCount, i));
imsdbObj.Persons.Del(i);
}
Console.ReadKey();
}
}
public class IMSDB
{
public DBSet<Person> Persons { get; set; }
}
public class DBSet<TEntity>
{
public bool Del(int id)
{
//这里可以加个调试用的显示信息
Console.Write("目前正删除id为: " + id.ToString() + "的记录 ");
return true;
}
}
public class Person
{
int Id { get; set; }
string Name { get; set; }
string Sex { get; set; }
}
}
1 // 先定义一个接口
2 public interface IMSDB
3 {
4 public bool Del(int id);
5 }
6
7
8 // 继承刚刚定义的借口
9 public class MSDB : IMSDB
10 {
11 //实现接口里面的方法,注意方法命和参数要和接口一致
12 public bool Del(int id)
13 {
14 return true;
15 }
16 }
17 //调用
18 IMSDB ims = new MSDB();
19 ims.Del(2012);
呵呵