泛型(一)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 泛型_一__什么是泛型
{
    public class GenericList<T>
    {
        private class Node
        {
            //字段
            private Node next;
            private T data;

            //有参构造函数
            public Node(T t)
            {
                next = null;
                data = t;
            }

            //属性 next
            public Node Next
            {
                get
                {
                    return next;
                }
                set
                {
                    next = value;
                }
            }
            public T Data
            {
                get
                {
                    return data;
                }
                set
                {
                    data = value;
                }
            }    
        }

        //字段
        private Node head;

        //无参构造函数
        public GenericList()
        {
            head = null;
        }

        //方法1
        //给Node添加元素
        public void AddHead(T t)
        {

            Node n = new GenericList<T>.Node(t);
            n.Next = head;
            head = n;
        }

        //方法2
        //IEnumerator<T> 接口,支持在泛型集合上进行简单的迭代
        //yield return 语句返回集合的一个元素,并移动到下一个元素上. yield break可停止迭代.
        public IEnumerator<T> GetEnumerator()
        {
            Node current = head;
            while (current !=null )
            {
                yield return current.Data;
                current = current.Next;
            }
        }
    }

  


    class Program
    {
        static void Main(string[] args)
        {
            //GenericList<T> 定义泛型类的对象list,并给予模板参数T为int型
            GenericList<int> list = new GenericList<int>();

            for (int x = 0; x < 10; x++)
            {
                list.AddHead(x);
            }

            foreach (int i in list)
            {
                System.Console.WriteLine("  " + i);
            }
            Console.WriteLine("/nDone/n");
            Console.ReadKey();


            GenericList<string> stringList = new GenericList<string>();
            for (int x = 0; x < 10; x++)
            {
                stringList.AddHead(x.ToString()+"****");
            }
            foreach (string str in stringList)
            {
                Console.WriteLine("  " + str);
            }
            Console.WriteLine("/nDone/n");
            Console.ReadKey();
        }
    }
}

在 Flutter 中,种非常强大的特性,允许开发者编写可以处理多种数据类的代码,同时保持类安全性。可以应用于类、方法以及数据结构中,以提高代码的复用性和灵活性。 ### 定义和使用类 可以通过在类名后添加 `<T>` 来定义类,其中 `T` 是类参数。例如,可以定义个简单的类来存储和检索任意类的值: ```dart class Cache<T> { T? _value; void cacheValue(T value) { _value = value; } T? getCachedValue() { return _value; } } ``` 使用时,可以指定具体的类,如 `String` 或 `int`: ```dart void main() { Cache<String> stringCache = Cache<String>(); stringCache.cacheValue("Tom"); print("获取的缓存内容为 ${stringCache.getCachedValue()}"); // 输出: 获取的缓存内容为 Tom Cache<int> intCache = Cache<int>(); intCache.cacheValue(18); print("获取的缓存内容为 ${intCache.getCachedValue()}"); // 输出: 获取的缓存内容为 18 } ``` ### 定义和使用方法 除了类,还可以定义方法。方法允许在方法级别上使用类参数。例如,可以定义个通用的打印方法: ```dart void printValue<T>(T value) { print("获取的值为 $value"); } ``` 调用时可以传递任意类的参数: ```dart printValue<String>("Tom"); // 输出: 获取的值为 Tom printValue<int>(18); // 输出: 获取的值为 18 ``` ### 与特定类约束 有时,可能需要限制参数的类范围,例如只接受 `Person` 类的子类。这可以通过 `T extends Person` 来实现: ```dart class Person { String name; Person(this.name); } class CacheWithConstraint<T extends Person> { T? _person; void cachePerson(T person) { _person = person; } String? getPersonName() { return _person?.name; } } ``` 使用时,只能传递 `Person` 或其子类的实例: ```dart void main() { CacheWithConstraint<Person> personCache = CacheWithConstraint<Person>(); personCache.cachePerson(Person("Tom")); print("获取的 T extends Person 的 name 字段为 ${personCache.getPersonName()}"); // 输出: 获取的 T extends Person 的 name 字段为 Tom } ``` ### 使用解析 JSON 数据 在 Flutter 中,使用来解析 JSON 数据是种常见的做法,尤其是在处理 API 响应时。通过 `json_serializable` 包,可以轻松实现支持。定义类 `BaseBean<T>`,并在注解中启用 `genericArgumentFactories`: ```dart import 'package:json_annotation/json_annotation.dart'; part 'base_bean.g.dart'; @JsonSerializable(genericArgumentFactories: true) class BaseBean<T> { T? data; int? status; String? message; BaseBean({this.data, this.status, this.message}); factory BaseBean.fromJson(Map<String, dynamic> json, T Function(dynamic json) fromJsonT) => _$BaseBeanFromJson(json, fromJsonT); Map<String, dynamic> toJson(Object? Function(T value) toJsonT) => _$BaseBeanToJson(this, toJsonT); } ``` 在解析 JSON 时,可以传递个具体的类转换函数,例如 `fromJson` 方法: ```dart void main() { final jsonMap = { 'data': {'name': 'Tom', 'age': 20}, 'status': 200, 'message': 'Success', }; final baseBean = BaseBean.fromJson( jsonMap, (json) => Person.fromJson(json), ); print("解析的 JSON 数据中,data 的 name 字段为 ${baseBean.data.name}"); // 输出: 解析的 JSON 数据中,data 的 name 字段为 Tom } ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值