C# 泛型

在 C# 中,泛型是一种规范,允许您使用占位符定义类和方法,并且编译器在编译时将这些占位符替换为指定的类型。属性可以定义泛型类(genericclasss)或方法(generics)。方法)。

要定义泛型类,必须使用尖括号<> 。尖括号用于将类或方法声明为泛型。这是一个简单的例子来帮助您理解这个概念。

 using System;
using System.Collections;

namespace it-kiso.com
{
    // ジェネリッククラスを定義する
    class GenericClass<T>{
        // ジェネリックメソッド
        public GenericClass(T msg){
            Console.WriteLine(msg);
        }
    }
    class Demo
    {
        static void Main(string[] args){
            GenericClass<string> str_gen = new GenericClass<string>("IT基礎");
            GenericClass<int> int_gen = new GenericClass<int>(1234567);
            GenericClass<char> char_gen = new GenericClass<char>('C');
            Console.ReadKey();
        }
    }
} 

允许的结果是:

IT基礎
1234567
C

一般特点

泛型被认为是增强程序功能的技术。泛型类和方法提供了非泛型类和方法无法提供的可重用性、类型安全性和效率的组合。泛型通常与集合和作用于集合的方法一起使用,并且 System.Collections.Generic 命名空间包含几个基于泛型的集合类。以下是泛型的一些属性的摘要。

  • 泛型类型可以最大限度地提高代码重用、保护类型安全并提高性能。
  • 泛型最常见的用途是创建集合类。
  • .NET 类库在 System.Collections.Generic 命名空间中包含几个新的通用集合类,可以使用它们来代替 System.Collections 中的集合类。
  • 您可以创建自己的通用接口、类、方法、事件和委托。
  • 您还可以限制泛型类访问特定数据类型的方法。
  • 有关通用数据类型中使用的类型的信息可以在运行时使用反射获得。

常用方法

尽管上面的示例使用了泛型类,但您也可以使用类型参数声明泛型方法。示例程序如下所示。

 using System;
using System.Collections.Generic;

namespace it-kiso.com
{
    class Demo
    {
        static void Swap<T>(ref T lhs, ref T rhs)
        {
            T temp;
            temp = lhs;
            lhs = rhs;
            rhs = temp;
        }
        static void Main(string[] args)
        {
            int a, b;
            char c, d;
            a = 10;
            b = 20;
            c = 'I';
            d = 'V';

            // 交換前に値を表示する
            Console.WriteLine("swap を呼び出す前の Int 値:");
            Console.WriteLine("a = {0}, b = {1}", a, b);
            Console.WriteLine("swap を呼び出す前の文字値:");
            Console.WriteLine("c = {0}, d = {1}", c, d);

            // swap を呼び出す
            Swap<int>(ref a, ref b);
            Swap<char>(ref c, ref d);

            // 交換後に値を表示する
            Console.WriteLine("swap を呼び出した後の Int 値:");
            Console.WriteLine("a = {0}, b = {1}", a, b);
            Console.WriteLine("swap を呼び出した後の文字値:");
            Console.WriteLine("c = {0}, d = {1}", c, d);
            Console.ReadKey();
        }
    }
} 

操作的结果将是:

swap を呼び出す前の Int 値:
a = 10, b = 20
swap を呼び出す前の文字値:
c = I, d = V
swap を呼び出した後の Int 値:
a = 20, b = 10
swap を呼び出した後の文字値:
c = V, d = I

共同代表

您还可以使用类型参数定义泛型委托,如以下示例所示。

delegate T NumberChanger<T>(T n);

[示例] 下面的示例展示了如何使用通用委托。

 using System;
using System.Collections.Generic;

namespace it-kiso.com
{
    class Demo
    {
        delegate T NumberChanger<T>(T n);
        static int num = 10;
        public static int AddNum(int p){
            num += p;
            return num;
        }

        public static int MultNum(int q){
            num *= q;
            return num;
        }
        public static int getNum(){
            return num;
        }
        static void Main(string[] args){
            // 委任のインスタンスを作成します
            NumberChanger<int> nc1 = new NumberChanger<int>(AddNum);
            NumberChanger<int> nc2 = new NumberChanger<int>(MultNum);
            // デリゲートオブジェクトを使用してメソッドを呼び出します
            nc1(25);
            Console.WriteLine("Num の値は: {0}", getNum());
            nc2(5);
            Console.WriteLine("Num の値は: {0}", getNum());
            Console.ReadKey();
        }
    }
} 

操作的结果将是:

Num の値は: 35
Num の値は: 175

通俗易懂的《C#泛型》讲解!您必须观看的 2 个最佳视频

【プログラミング講座(C#)】第136回 ジェネリックについて【独り言】
https://www.youtube.com/watch?v=M6uZOosc0jY&pp=ygUfIEMjIOOCuOOCp-ODjeODquODg-OCr-OCuSZobD1KQQ%3D%3D
オブジェクト指向最後の難関!コンストラクタを使ってコードを書く!【C#講座/visualstudio#19】
https://www.youtube.com/watch?v=0JLyVeUS9hk&pp=ygUfIEMjIOOCuOOCp-ODjeODquODg-OCr-OCuSZobD1KQQ%3D%3D
在 C# 中,泛型是一种规范,允许您使用占位符定义类和方法,并且编译器在编译时将这些占位符替换为指定的类型。属性可以定义泛型类(genericclasss)或方法(generics)。方法)。

要定义泛型类,必须使用尖括号<> 。尖括号用于将类或方法声明为泛型。这是一个简单的例子来帮助您理解这个概念。

 using System;
using System.Collections;

namespace it-kiso.com
{
    // ジェネリッククラスを定義する
    class GenericClass<T>{
        // ジェネリックメソッド
        public GenericClass(T msg){
            Console.WriteLine(msg);
        }
    }
    class Demo
    {
        static void Main(string[] args){
            GenericClass<string> str_gen = new GenericClass<string>("IT基礎");
            GenericClass<int> int_gen = new GenericClass<int>(1234567);
            GenericClass<char> char_gen = new GenericClass<char>('C');
            Console.ReadKey();
        }
    }
} 

允许的结果是:

IT基礎
1234567
C

一般特点

泛型被认为是增强程序功能的技术。泛型类和方法提供了非泛型类和方法无法提供的可重用性、类型安全性和效率的组合。泛型通常与集合和作用于集合的方法一起使用,并且 System.Collections.Generic 命名空间包含几个基于泛型的集合类。以下是泛型的一些属性的摘要。

  • 泛型类型可以最大限度地提高代码重用、保护类型安全并提高性能。
  • 泛型最常见的用途是创建集合类。
  • .NET 类库在 System.Collections.Generic 命名空间中包含几个新的通用集合类,可以使用它们来代替 System.Collections 中的集合类。
  • 您可以创建自己的通用接口、类、方法、事件和委托。
  • 您还可以限制泛型类访问特定数据类型的方法。
  • 有关通用数据类型中使用的类型的信息可以在运行时使用反射获得。

常用方法

尽管上面的示例使用了泛型类,但您也可以使用类型参数声明泛型方法。示例程序如下所示。

 using System;
using System.Collections.Generic;

namespace it-kiso.com
{
    class Demo
    {
        static void Swap<T>(ref T lhs, ref T rhs)
        {
            T temp;
            temp = lhs;
            lhs = rhs;
            rhs = temp;
        }
        static void Main(string[] args)
        {
            int a, b;
            char c, d;
            a = 10;
            b = 20;
            c = 'I';
            d = 'V';

            // 交換前に値を表示する
            Console.WriteLine("swap を呼び出す前の Int 値:");
            Console.WriteLine("a = {0}, b = {1}", a, b);
            Console.WriteLine("swap を呼び出す前の文字値:");
            Console.WriteLine("c = {0}, d = {1}", c, d);

            // swap を呼び出す
            Swap<int>(ref a, ref b);
            Swap<char>(ref c, ref d);

            // 交換後に値を表示する
            Console.WriteLine("swap を呼び出した後の Int 値:");
            Console.WriteLine("a = {0}, b = {1}", a, b);
            Console.WriteLine("swap を呼び出した後の文字値:");
            Console.WriteLine("c = {0}, d = {1}", c, d);
            Console.ReadKey();
        }
    }
} 

操作的结果将是:

swap を呼び出す前の Int 値:
a = 10, b = 20
swap を呼び出す前の文字値:
c = I, d = V
swap を呼び出した後の Int 値:
a = 20, b = 10
swap を呼び出した後の文字値:
c = V, d = I

共同代表

您还可以使用类型参数定义泛型委托,如以下示例所示。

delegate T NumberChanger<T>(T n);

[示例] 下面的示例展示了如何使用通用委托。

 using System;
using System.Collections.Generic;

namespace it-kiso.com
{
    class Demo
    {
        delegate T NumberChanger<T>(T n);
        static int num = 10;
        public static int AddNum(int p){
            num += p;
            return num;
        }

        public static int MultNum(int q){
            num *= q;
            return num;
        }
        public static int getNum(){
            return num;
        }
        static void Main(string[] args){
            // 委任のインスタンスを作成します
            NumberChanger<int> nc1 = new NumberChanger<int>(AddNum);
            NumberChanger<int> nc2 = new NumberChanger<int>(MultNum);
            // デリゲートオブジェクトを使用してメソッドを呼び出します
            nc1(25);
            Console.WriteLine("Num の値は: {0}", getNum());
            nc2(5);
            Console.WriteLine("Num の値は: {0}", getNum());
            Console.ReadKey();
        }
    }
} 

操作的结果将是:

Num の値は: 35
Num の値は: 175

通俗易懂的《C#泛型》讲解!您必须观看的 2 个最佳视频

【プログラミング講座(C#)】第136回 ジェネリックについて【独り言】
https://www.youtube.com/watch?v=M6uZOosc0jY&pp=ygUfIEMjIOOCuOOCp-ODjeODquODg-OCr-OCuSZobD1KQQ%3D%3D
オブジェクト指向最後の難関!コンストラクタを使ってコードを書く!【C#講座/visualstudio#19】
https://www.youtube.com/watch?v=0JLyVeUS9hk&pp=ygUfIEMjIOOCuOOCp-ODjeODquODg-OCr-OCuSZobD1KQQ%3D%3D