繁体   English   中英

在C#类中调用方法

[英]Calling a method in a C# class

这是我想理解的C#代码。 一个类在接口中具有以下可用方法。

T GetLookupValue<T, S>(string sTName, string sFName, string sLuName, S value);

当我使用dotPeek查看此类的用法时,它显示了这一点。

 public T GetLookupValue<T, S>(string sTName, string sFName, string sLuName, S value)
{
  return (T) this.db.a(sTName, sFName, sLuName, false, (object) value, false, false);
}

我怎么称呼这个方法? 我需要用T和S代替什么?

此方法将自身表示为广义的查询功能。 如果实现确实可以处理任何类型,那么您可以对S和T完全使用任何类型。

例子:

string result = GetLookupValue<string, int>("tname", "fname", "luname", 42);

MyClass result = GetLookupValue<MyClass, string>("tname", "fname", "luname", "blah");

这是C#泛型的精彩介绍

基本上,您只需将T和S替换为所需的任何内容即可。 T是您的返回类型,S将是用于最终参数( value )的类型

例如:

var myObject = GetLookupValue<MyObject, MyOtherObject>("sTName", "sFName", "sLuName", (MyOtherObject)myOtherObject);

这允许更健壮的代码。 您可以在何处塑造一种方法,使其成为您需要的任何方法

泛型是如何将任何内容放入List<T>

List<String> stringList = new List<String>();
List<int> intList = new List<int>();
...

在编译时,泛型的值内置在代码中。 因此,如果您在上述示例中进行了dotPeek,您将看到类似以下内容:

public MyObject GetLookupValue<MyObject, MyOtherObject>(string sTName, string sFName, string sLuName, MyOtherObject value)
{
  return (MyObject) this.db.a(sTName, sFName, sLuName, false, (object) value, false, false);
}

***但是,在编写此代码时,将参数value作为泛型似乎是毫无意义的,因为它只是T GetLookupValue<T>(string sTName, string sFName, string sLuName, object value);object ...。它们也可能已经使它成为T GetLookupValue<T>(string sTName, string sFName, string sLuName, object value); (这允许最终将值对象装箱(即,int,double等)

我怎么称呼这个方法?

这将取决于您要使用的类型。 例如:

int result = GetLookupValue<int, string>("tname", "fname", "luname", "some value");

类型T和S是类型。 要调用此方法并存储结果,请使用:

SomeClass returnedObject = GetLookupValue<SomeClass, SomeOtherType>("", "", "", "");

该方法将返回与您为T输入的值等效的类型。

看来T是您的返回类型,而S是内部用作某些值的类型。

因此,您需要为T和S指定TYPES,因此:

SomeType result = GetLookupValue<SomeType, SomeValueType>(...);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM