泛型方法是如何工作的
本文关键字:工作 何工作 泛型方法 | 更新日期: 2023-09-27 18:00:21
我最近在MSDN上学习了本教程,该教程允许我的应用程序的用户更改和保存设置。经过一番挠头之后,我想我明白了所有的一切,除了一件事。让我们从原始代码中最相关的部分开始。所有东西都在一个名为AppSettings的类中。我用来测试它的属性是son1。我的理解是:
在代码的最后,你得到了这个:
// Property to get and set son1 Key.
public int son1
{
get
{
return GetValueOrDefault<int>(son1KeyName, son1Default);
}
set
{
if (AddOrUpdateValue(son1KeyName, value))
{
Save();
}
}
}
如果你设置了属性,这很容易。它只是调用这个方法:
public bool AddOrUpdateValue(string Key, Object value)
{
bool valueChanged = false;
// If the key exists
if (settings.Contains(Key))
{
// If the value has changed
if (settings[Key] != value)
{
// Store the new value
settings[Key] = value;
valueChanged = true;
}
}
// Otherwise create the key.
else
{
settings.Add(Key, value);
valueChanged = true;
}
return valueChanged;
}
我只需要这么做,我就完了:
AppSettings param = new AppSettings();
param.son1 = 1;
现在GET的语法对我来说似乎更奇怪了。过程是一样的,一个方法是由一个属性使用的。get属性列在我帖子的顶部。正如你所看到的,它调用这个方法:
public T GetValueOrDefault<T>(string Key, T defaultValue)
{
T value;
// If the key exists, retrieve the value.
if (settings.Contains(Key))
{
value = (T)settings[Key];
}
// Otherwise, use the default value.
else
{
value = defaultValue;
}
return value;
}
"T"也写在<和>。如果我能理解的话,我应该能够将属性设置为默认值,正如我在程序开始时所做的那样。任何小费都将不胜感激。非常感谢。
"T"也写在<和>。
这表明它是一个通用方法。
基本上,如果不阅读泛型,你就无法理解它,这是一个太大的主题,无法在Stack Overflow答案中充分涵盖。遵循MSDN指南的链接:)
非常的简短版本是,它意味着该方法由类型和值参数化。泛型可以应用于类型和方法,因此List<string>
是"字符串列表",List<int>
是"整数列表"。通用方法类似,但稍难理解-这里GetValueOrDefault
可以描述为"根据给定的字符串键返回类型为T
的值,或者如果设置中不存在该键,则返回提供的默认值(也属于T
类型)。"
因此,GetValueOrDefault<string>(key, "foo")
将从设置中返回一个string
,默认为"foo"
,GetValueOrDefault<int>(key, 10)
将从设置返回一个int
,默认为10
。
不过,这只是30秒的演练-还有很多东西需要学习:)
这是一个复杂的主题,但它有几个词:它基本上意味着你的方法可以用于多种类型。为了简化,您可以用任何类型替换T而不是编写多个函数:
public string GetValueOrDefault(string Key, string defaultValue)
public int GetValueOrDefault(string Key, int defaultValue)
你只写一个:
T GetValueOrDefault<T>(string Key, T defaultValue)
这被称为泛型。
泛型的一个突出例子是List<T>
,它接受任何类型,并充当该类型对象的容器。
List<int> intList; // a list of int
List<string> stringList; // a list of strings