C#泛型 - 我可以将这个类变成泛型吗?

时间:2011-03-25 15:18:44

标签: c# generics

我有一个课重复了很多次。我的老板让我做通用,但我不确定这意味着什么。任何人都可以帮助或建议如何?抱歉英语不好。我希望这是有道理的。

public class CapacityServiceContext : TableServiceContext
{
    public CapacityServiceContext(string baseAddress, StorageCredentials credentials)
        : base(baseAddress, credentials)
    {
    }
    public const string TableName = "Capacity";
    public IQueryable<Capacity> CapacityTable
    {
        get
        {
            return this.CreateQuery<Capacity>(TableName);
        }
    }

}

提前谢谢。

米娜

6 个答案:

答案 0 :(得分:7)

例如,您的代码可能如下所示:

public class ServiceContext<T> : TableServiceContext
{
    public ServiceContext(string baseAddress, StorageCredentials credentials)
        : base(baseAddress, credentials)
    {
    }
    public const string TableName = typeof(T).Name;
    public IQueryable<T> Table
    {
        get
        {
            return this.CreateQuery<T>(TableName);
        }
    }
}

并且会像任何泛型类一样实例化:

ServiceContext<Capacity> context = new ServiceContext<Capacity>(…);

基本上,我已将您班级中Capacity的每次出现都更改为T,并通过将<T>附加到班级名称来使该班级具有通用性。现在,该类也可用于其他类型。

答案 1 :(得分:3)

您可以制作TableServiceContext<T>,但问题与您的TableName常量有关。除非您可以保证表名始终与通用类的名称相同,否则它看起来不太好。

但是如果你能做出这样的保证,那就看起来像这样:

public class TableServiceContext<T>
{
    public TableServiceContext(string baseAddress, StorageCredentials credentials)
        : base(baseAddress, credentials)
    {
    }
    public string TableName { get { return typeof(T).Name; } }
    public IQueryable<T> Table
    {
        get
        {
            return this.CreateQuery<T>(TableName);
        }
    }
}

答案 2 :(得分:1)

泛型非常受欢迎,可以帮助您的代码更加可重用。

以下是概述,您可以决定如何在项目中最好地使用它。

http://msdn.microsoft.com/en-us/library/512aeb7t(v=VS.100).aspx

答案 3 :(得分:1)

我猜你的老板想要的东西如下:

public class ServiceContext<T> : TableServiceContext
{
    public ServiceContext(string baseAddress, StorageCredentials credentials)
        : base(baseAddress, credentials)
    {
    }
    public IQueryable<T> Table
    {
        get
        {
            return this.CreateQuery<T>(typeof(T).Name);
        }
    }

}

你应该让他/她确定,你可以按照以下方式使用这个课程:

ServiceContext<Capacity> serviceContext = new ServiceContext<Capacity>();
IQueryable<Capacity> query = serviceContext.Table;

答案 4 :(得分:0)

我假设他建议你在容量方面做出通用。

public class ServiceContext<T> : TableServiceContext {

...

public IQueryable<T> Table {        
  get {            
    return this.CreateQuery<T>(typeof(T).Name);       
  }    
}

然后你可以创建一个:

ServiceContext<Capacity>()

没有看到其他课程,我不确定会涉及到什么。

答案 5 :(得分:0)

他可能会询问有关更改CapacityTable属性的信息:

...
public IQueryable<T> Table
{
    get
    {
        return this.CreateQuery<T>(typeof(T).Name);
    }
}