gpt4 book ai didi

c# - 泛型允许哪些元素按类型参数化?

转载 作者:行者123 更新时间:2023-11-30 20:44:57 26 4
gpt4 key购买 nike

这是一些测试的问题。问题是“泛型允许哪些元素按类型进行参数化?”和 5 种答案:

  1. Classes
  2. Structs
  3. Methods
  4. Events
  5. Fields

乍一看问题很简单,但我不确定正确答案。让我们一步一步来。

  1. 类(class)。

我们可以这样写

class SuperKeyType<K, V, U>
where U : System.IComparable<U>
where V : new()
{ }

因此,类可以按类型参数化。与结构相同。

关于方法。我们可以这样写:

class GenericList<T>
{
// CS0693
void SampleMethod<T>() { }
}

所以,方法也是如此。

关于事件和字段:

class Foo<TValue> {
public string Value { get; set; }
public TValue TypedValue {
get {
return (TValue)Convert.ChangeType(Value, tyepof(TValue));
}
}
}

属性按类型参数化,正确吗(与事件相同)?但是在接下来的页面上

Making a generic property

我看到以下答案:

Properties, events, constructors etc can't be generic - only methods and types can be generic. Most of the time that's not a problem, but I agree that sometimes it's a pain. Brannon's answer gives two reasonable workarounds.

我在这个地方问自己——“按类型参数化”到底是什么意思?上面的属性是否按类型参数化?正确答案是什么:

  1. true
  2. true
  3. true
  4. false
  5. false

  1. true
  2. true
  3. true
  4. true
  5. true

最佳答案

Property is parametrized by type, correct (the same with Events)?

不,不是。属性本身没有类型参数 - 您已经在上获得了它。

将其与您的方法示例进行比较:

class GenericList<T>
{
// CS0693
void SampleMethod<T>() { }
}

...这样会更清楚

class NonGenericType
{
void GenericMethod<T>() { }
}

注意类型参数 (T) 是如何在方法签名中引入的,不是在类中。

您不能为字段、属性、事件、构造函数或终结器指定类型参数。

通用属性必须类似于:

// Not valid: properties can't be generic. But imagine...    
public T Value<T> { get; set; }

同样,通用构造函数类似于:

public class Foo
{
// Not valid: constructors can't be generic. But imagine...
public Foo<T>(T initializationValue)
{
// Note that this isn't constructing a Foo<T> -
// Foo is a non-generic type. It's only the constructor
// that is generic.
}
}

通用字段作为一个概念甚至更奇怪。这可能意味着什么?

private int field<T>;
...
int x = field<string>;

关于c# - 泛型允许哪些元素按类型参数化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28743673/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com