c#-C#中如何做泛型类型限制

问题描述

C#中如何做泛型类型限制

情况如下:
定义一个类aa;
另一个包含泛型方法类

 BB
{
有数个由aa派生的子类如a1 a2 a3
    public test <T>(<T> test)
    {
    xxxx;
    }
}

1.请问如何限制T使T仅是当前BB类中从aa中派生的子类a1 a2 a3中的一个。
2.若bb类可被继承,继承的类可继续派生a4 a5 a6.....能否不需重写test方法,即限制具有通用性。
非常感谢!!!

解决方案

C#中使用where子句限制泛型方法的泛型类型。
1.要求泛型类型实现一个接口或派生于某个基类;
2.不能定义必须由泛型类型实现的运算符。

TestMethodTTwo.cs:

[c-sharp] view plaincopy
using System;

using System.Collections.Generic;

namespace Magci.Test.Collections

{

//定义接口

public interface IAccount

{

string Name

{

get;

}

    decimal Balance
    {
        get;
    }
}     

public class Account : IAccount
{
    private string name;
    public string Name
    {
        get
        {
            return name;
        }
    }     

    private decimal balance;
    public decimal Balance
    {
        get
        {
            return balance;
        }
    }     

    public Account(string name, decimal balance)
    {
        this.name = name;
        this.balance = balance;
    }
}     

public class Algorithm
{
    //声明泛型方法
    public static decimal Total<TAccount>(IEnumerable<TAccount> e)
        //使用where子句限制泛型类型
        where TAccount : IAccount
    {
        decimal total = 0;
        foreach (TAccount a in e)
        {
            total += a.Balance;
        }
        return total;
    }
}     

public class TestMethodTTwo
{
    public static void Main()
    {
        List<Account> accounts = new List<Account>();
        accounts.Add(new Account("Magci", 9999.99m));
        accounts.Add(new Account("Haha", 1241.33m));
        accounts.Add(new Account("Heihei", 1551.2m));
        accounts.Add(new Account("Kevin", 2643m));     

        //调用泛型方法
        decimal total = Algorithm.Total(accounts);
        Console.WriteLine("Total : {0:C}", total);
    }
}

}

解决方案二:

通过类做泛型约束 where
public class MyGenericClass where T:IComparable { }

时间: 2024-08-03 20:56:57

c#-C#中如何做泛型类型限制的相关文章

百度SEO关键词优化中如何做百度知道

百度网站优化中如何做百度知道?景天SEO排名优化经验与大家分享,下面我就总结一下几年来做百度知道的经验和大家一起分享 第一:同账号同IP不能提问过于频繁,有些站长刚注册一个号后,就频繁的问问题,以方便自己的回答,但是有没有想过一个人怎么可能有这么多的问题呢?这是非常不合常理的,搜索引擎具有高智能,它有理由判断出这个账号或IP有疑点,如果你还是不停的提问那么你这个账号很有可能被K. 第二:提问题的时候,尽量不要问过于相似的问题,从一个句话的语调,格式很容易判断出来这些问话,是出于一个人.如果想多提

ps中如何做一把和实际尺寸一样的尺子

  ps中如何做一把和实际尺寸一样的尺子呢? 最终效果: 1,填充背景为灰色,再填充图案 2,新建一层,使用渐变,更改图层模式为柔光,如图; 3,新建图层,创建矩形,添加图层样式,如图; 4,再建立如图所示的蓝色矩形,添加图层样式,如图; 5,画上两条高度为1像素的白色线条,将两条白色线条放在如图所示的位置; 6,绘制尺子上的刻度,绘制黑线,白线各一条.更改图层模式为叠加,如图所示; 7,将线条复制,形成尺子上的刻度,如图; 8,输入文字,完成最终效果. 分类: PS鼠绘教程

在PHP中如何做批量删除?

  在PHP中怎么做批量删除?求代码 最近在做一个项目,但是批量删除一直都不能达到效果.我把代码贴在下面,各位大牛帮我看看,问题出在什么地方,再此谢谢了! //1.批量删除 if($_POST["chk"]){ $sid = implode(",", $_POST["chk"]); $query = mysql_query("delete from news where news_id in (".$sid.")&q

java datatable中怎么做排序编号!

问题描述 java datatable中怎么做排序编号! 我现在需要在excel行号前面加一列编号,并且按顺序来排列!例如1.2.3.4..... 解决方案 你用的是什么数据库?现在几个主流的数据库都有ROWNUM 或者参考How to display dataTable row numbers in JSF这篇文章和源码是否对你有帮助.

急!IIS中网站做了修改,可访问后没有变化。

问题描述 急!连接内容不更新!!!IIS中网站做了修改,可访问后没有变化.我在网页中有一些超链接,超链接连接到网站中存放的一些excel文件.比如有一个excel文件123.xls的内容更新了,我用更新后的123.xls把原来123.xls文件覆盖掉了.这些操作都是在服务器上进行的,可是我在我自己的机子上访问服务器,点击超链接后打开的excel文件还是原来的那个.甚至把123.xls文件在服务器上删除,在客户端还是能够打开.我把客户端机子上的IE缓存,临时文件都删除了,还是没用.IE为IE7.0

aspx前台有两个按钮 id为 a和b 我在后台cs中怎么做才能让它们隐藏

问题描述 aspx前台有两个按钮 id为 a和b 我在后台cs中怎么做才能让它们隐藏 aspx前台有两个按钮 id为 a和b 我在后台cs中怎么做才能让它们隐藏 解决方案 加一个div 如果按钮隐藏出现空白不好看 所以干脆直接隐藏一个div 在aspx.cs里面获取那div的id 然后隐藏div

急急急急急-在strurs2中怎么做文件上传的进度条

问题描述 在strurs2中怎么做文件上传的进度条 在工作中需要做文件上传,使用的技术是struts2和jsp 需要做进度条一直没找到解决办法希望哪位前辈做过给个思路 最好有源代码.

ios开发-xcode中怎么做到点击按钮从当前页面转入一个新的页面?

问题描述 xcode中怎么做到点击按钮从当前页面转入一个新的页面? 我是个初学者,只有简单的了解MVC和一些简单的api,我想知道我做一个登录界面,怎么让我点击登录之后进入下一个应用界面呢?大牛给详细的解答好吗,谢谢大神. 解决方案 从A页面跳到B页面 1.ViewControllerB *B=[[ViewControllerB alloc] init]; [self.navigationController pushViewController: B animated:true]; 2.Vie

android项目中_做什么操作,r文件会自动生成相应的静态变量

问题描述 android项目中_做什么操作,r文件会自动生成相应的静态变量 android项目中_做什么操作,r文件会自动生成相应的静态变量 这个r文件的静态变量哪些方法会调用呢 解决方案 有听过自动生成R文件的,没听说过R文件还能自动生成静态变量的