C# 闭合构造类型的用途是什么?
我正在研究C#中的泛型类型,我发现了这篇关于泛型类的MSDN文章。几乎一切正常,但我对封闭构造类型的概念有疑问 因此,我决定编写一些测试代码来探索这个概念: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
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
。