Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 闭合构造类型的用途是什么?_C#_Generics - Fatal编程技术网

C# 闭合构造类型的用途是什么?

C# 闭合构造类型的用途是什么?,c#,generics,C#,Generics,我正在研究C#中的泛型类型,我发现了这篇关于泛型类的MSDN文章。几乎一切正常,但我对封闭构造类型的概念有疑问 因此,我决定编写一些测试代码来探索这个概念: using System; using System.Collections; namespace Articulos.Cap03 { internal class ClaseBase <T> { } internal class SubclaseGenerica<T> : ClaseBase &l

我正在研究C#中的泛型类型,我发现了这篇关于泛型类的MSDN文章。几乎一切正常,但我对封闭构造类型的概念有疑问

因此,我决定编写一些测试代码来探索这个概念:

using System;
using System.Collections;

namespace Articulos.Cap03
{
    internal class ClaseBase <T> { }
    internal class SubclaseGenerica<T> : ClaseBase <long> { }

    internal class HerenciaCerrada
    {
        public static void Main()
        {
            SubclaseGenerica<decimal> sg1 = new SubclaseGenerica<decimal>();
            SubclaseGenerica<Object> sg2 = new SubclaseGenerica<Object>();
            SubclaseGenerica<ArrayList> sg3 = new SubclaseGenerica<ArrayList>();
        }
    }
}
使用系统;
使用系统集合;
名称空间Articulos.Cap03
{
内部类ClaseBase{}
内部类subcasegenerica:ClaseBase{}
内类异端雷达
{
公共静态void Main()
{
Subassegenerica sg1=新的Subassegenerica();
Subassegenerica sg2=新的Subassegenerica();
Subassegenerica sg3=新的Subassegenerica();
}
}
}
它可以正确编译和执行

以下内容的主题是什么:

internal class SubclaseGenerica<T> : ClaseBase <long> { }
内部类subcasegenerica:ClaseBase{}

[注意:我认为它将SubseGenerica的参数类型限制为
long
基元类型。]

当您给类一些内容时,更容易理解它:

internal class ClaseBase<T>
{
    public T BaseValue { get; set; }
}
internal class SubclaseGenerica<T> : ClaseBase<long>
{
    public T DerivedValue { get; set; }
}

派生类型本身不是泛型的,并且正在修复基类的泛型类型。

当您为类提供一些内容时,更容易理解它:

internal class ClaseBase<T>
{
    public T BaseValue { get; set; }
}
internal class SubclaseGenerica<T> : ClaseBase<long>
{
    public T DerivedValue { get; set; }
}

派生类型本身不是泛型的,并且正在修复基类的泛型类型。

当您为类提供一些内容时,更容易理解它:

internal class ClaseBase<T>
{
    public T BaseValue { get; set; }
}
internal class SubclaseGenerica<T> : ClaseBase<long>
{
    public T DerivedValue { get; set; }
}

派生类型本身不是泛型的,并且正在修复基类的泛型类型。

当您为类提供一些内容时,更容易理解它:

internal class ClaseBase<T>
{
    public T BaseValue { get; set; }
}
internal class SubclaseGenerica<T> : ClaseBase<long>
{
    public T DerivedValue { get; set; }
}

如果派生类型本身不是泛型的,并且正在修复基类的泛型类型。

那么,这肯定是一个奇怪的声明:

internal class SubclaseGenerica<T> : ClaseBase <long> { }

那就好了。
ClaseBase
中的任何代码(在执行时)都会看到
T
long
,而
subsegenerica
中的任何代码(在执行时)都会看到
T
string
,因为它们是两个不同的类型参数。

好吧,这当然是一个奇怪的声明:

internal class SubclaseGenerica<T> : ClaseBase <long> { }

那就好了。
ClaseBase
中的任何代码(在执行时)都会看到
T
long
,而
subsegenerica
中的任何代码(在执行时)都会看到
T
string
,因为它们是两个不同的类型参数。

好吧,这当然是一个奇怪的声明:

internal class SubclaseGenerica<T> : ClaseBase <long> { }

那就好了。
ClaseBase
中的任何代码(在执行时)都会看到
T
long
,而
subsegenerica
中的任何代码(在执行时)都会看到
T
string
,因为它们是两个不同的类型参数。

好吧,这当然是一个奇怪的声明:

internal class SubclaseGenerica<T> : ClaseBase <long> { }

那就好了。
ClaseBase
中的任何代码(在执行时)将看到
T
long
,而
subsegenerica
中的任何代码(在执行时)将看到
T
string
,因为它们是两个不同的类型参数。

ClaseBase的
T
Subsegenerica的
T
是独立的(就像两个同名但方法不同的变量是独立的)。谢谢@Cameron。你能假设或说出
ClaseBase
ClaseBase
)的
long
参数是什么吗?@JohnOrtizOrdoñez它将
T
ClassBase
的定义中的所有用法修正为
long
ClaseBase
T
subsegenerica
T
是独立的(就像两个同名但不同方法的变量是独立的)。谢谢@Cameron。你能假设或说出
ClaseBase
ClaseBase
)的
long
参数是什么吗?@JohnOrtizOrdoñez它将
T
ClassBase
的定义中的所有用法修正为
long
ClaseBase
T
subsegenerica
T
是独立的(就像两个同名但不同方法的变量是独立的)。谢谢@Cameron。你能假设或说出
ClaseBase
ClaseBase
)的
long
参数是什么吗?@JohnOrtizOrdoñez它将
T
ClassBase
的定义中的所有用法修正为
long
ClaseBase
T
subsegenerica
T
是独立的(就像两个同名但不同方法的变量是独立的)。谢谢@Cameron。你能假设或者说
ClaseBase
ClaseBase
)的
long
参数的作用是什么吗?@JohnOrtizOrdoñez它将
ClassBase
定义中
T
的所有用法都修正为
long