首页 新闻 会员 周边 捐助

一个关于类调用问题。应该比较简单。高手帮忙。很急。满意的话会加分。谢谢!在线等!

0
悬赏园豆:20 [已解决问题] 解决于 2011-07-25 18:26

首先,看类定义: 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();方法,具体实现原理是什么呢?

潇客的技术博客的主页 潇客的技术博客 | 初学一级 | 园豆:20
提问于:2011-07-15 01:18
< >
分享
最佳答案
0

解决了问题麻烦速速标记答案

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; }
}
}

收获园豆:20
dotNetDR_ | 老鸟四级 |园豆:2078 | 2011-07-15 08:35
谢谢这位哥们儿的努力,虽然还没完全解决我的问题~
潇客的技术博客 | 园豆:20 (初学一级) | 2011-07-25 18:25
确实抱歉啊~反射我还不太熟悉啊~
dotNetDR_ | 园豆:2078 (老鸟四级) | 2011-07-25 18:27
其他回答(1)
0
View Code
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);

 

呵呵

阿K&LiveCai | 园豆:514 (小虾三级) | 2011-07-15 08:06
不对呀,我是想用,objIMSDB.Persons.Del(1);这种方式调用。
支持(0) 反对(0) 潇客的技术博客 | 园豆:20 (初学一级) | 2011-07-15 08:24
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册