20150802-泛型

一、格式

public class Student <T,E extends Pet> {}
public class Student<T> {}

二、什么时候使用

在集合框架中常见,使用集合时,将集合中要存储的数据类型作为参数传递到<>中即可。

三、泛型类

什么时候用泛型类?
答:当类中要操作的引用数据类型不确定时,早起定义Object来扩展,现在定义泛型来扩展。

public class Student<T,E extends Pet> { //T和E
    private String name;
    private T clothes;
    private E pet;
    private int age;

    public Student(String name,int age){

    }


    public void setClothes(T clothes){  //set方法
        this.clothes=clothes;
    }
    public T getClothes(){  //get方法
        return clothes;
    }
    public E getPet() {   //get方法
        return pet;
    }
    public void setPet(E pet) {   //set方法
        this.pet = pet;
    }


    public int getAge() {
        return age;
    }


    public void setAge(int age) {
        this.age = age;
    }



}

用时:

public class Test01 {

    public static void main(String[] args) {
        Student<NaZhuang,Dog> stu = new Student<>("zhangsan",28);
        NaZhuang nz = stu.getClothes();
        Dog dog = stu.getPet();


    }

}

四、泛型方法

目的:让不同的方法可以操作不同的类型,且类型不确定,可以将泛型定义在方法上。

class People{
    public <T> void show(){
    ……
    }
}

五、静态方法泛型

静态方法不可以访问类上定义的泛型,如果静态方法操作的应用数据类型不确定,可以将泛型定义在方法上。
public static <w> void method(W t)
### C# 概述 C# 提供了一种机制,在定义方法、类、接口时不涉及具体的类,而是在使用时再指定实际的数据类。这不仅提高了代码的灵活性和重用性,还增强了类安全性并优化了性能[^1]。 #### 的优势 利用技术能够实现最大化的代码复用度、保持类安全性和提升执行效率。借助于.NET框架提供的`System.Collections.Generic`命名空间下的多个内置集合类,开发者可以直接采用这些高效且类安全的数据结构来代替旧版非版本[^2]。 #### 创建自定义组件 除了使用现成的集合外,还可以构建属于自己的接口、类、方法等。下面是一个简单的栈(Stack)实现例子: ```csharp class MyStack<T> { private List<T> items; public MyStack() { items = new List<T>(); } public void Push(T item) { items.Add(item); } } ``` 此段代码展示了如何声明一个带有单个类参数`<T>`的类,并在其内部操作该类的实例。这里选择了更灵活的`List<T>`作为存储容器而不是数组,以便更好地管理动态增长的需求[^4]。 #### 类约束的应用 为了使更加实用,有时需要对允许传入的具体类加以限制。例如,当希望某个函数仅能接收实现了特定接口的对象时,则可以通过添加where子句来进行限定: ```csharp public class ExampleClass<T> where T : IComparable, IDisposable { // Class implementation... } ``` 上述语法表示只有那些既继承了IDisposable又实现了IComparable接口的类才可以被当作`ExampleClass<>`的实际参数传递给定界符内的位置。 #### 委托简介 另外值得一提的是委托——一种结合了特性的委托形式。它们允许我们像对待常规方法那样处理具有不同签名的动作或行为模式。比如定义如下所示的一个简单事件处理器模板: ```csharp public delegate TResult Func<in T, out TResult>(T arg); // 或者用于无返回值的情况 public delegate void Action<in T>(T obj); ``` 这里的关键词`in` 和 `out`分别指定了输入/输出方向上的协变特性支持[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值