C# 使用泛型类型声明方法
我在C#中使用了泛型类型,我对使用泛型类型还不熟悉。所以,现在我遇到了一个问题。我有一些类似的课程:C# 使用泛型类型声明方法,c#,generics,C#,Generics,我在C#中使用了泛型类型,我对使用泛型类型还不熟悉。所以,现在我遇到了一个问题。我有一些类似的课程: public class MyModel1 { } public class MyModel2 { } public class BaseClass<T> { } public class ChildClass1 : BaseClass<MyModel1> { } public class ChildClass2 : BaseClass<MyModel2&g
public class MyModel1
{
}
public class MyModel2
{
}
public class BaseClass<T>
{
}
public class ChildClass1 : BaseClass<MyModel1>
{
}
public class ChildClass2 : BaseClass<MyModel2>
{
}
public class AnotherClass
{
//What will be the syntax of declaring this method
//The syntax of the following method is wrong and incomplete.
//It's there just to give an idea about whai i want to do.
public void MyMethod<T>()
where T : BaseClass<..what to write..>
{
}
}
公共类MyModel1
{
}
公共类MyModel2
{
}
公共类基类
{
}
公共类ChildClass1:基类
{
}
公共类ChildClass2:基类
{
}
公共类另一类
{
//声明此方法的语法是什么
//以下方法的语法错误且不完整。
//它只是给我一个关于我想做什么的想法。
公共方法()
其中T:BaseClass
{
}
}
我的问题是,如果我想这样调用MyMethod,那么声明MyMethod的正确语法是什么:
MyMethod<ChildClass1>();
public void MyMethod<T, U>()
where T : BaseClass<U>
{
}
MyMethod();
您忘记了提及返回类型,并在类名后添加了
。例如,如果返回类型为void,则可以将该方法声明为:
public void MyMethod<T>()
where T : BaseClass<T>
{
}
public void MyMethod()
其中T:BaseClass
{
}
您忘记了提及返回类型,并在类名后添加了
。例如,如果返回类型为void,则可以将该方法声明为:
public void MyMethod<T>()
where T : BaseClass<T>
{
}
public void MyMethod()
其中T:BaseClass
{
}
这将起作用(我的意思是它可以编译)
public void MyMethod()
其中T:BaseClass
{ }
这也是:
public void MyMethod<T>()
where T : ChildClass1
{ }
public void MyMethod()
T:ChildClass1在哪里
{ }
阅读您的评论后进一步编辑 您可以这样做:
public class AnotherClass<TBaseClass, TModel> where TBaseClass : BaseClass<TModel>
{
public void MyMethod(TBaseClass input)
{ }
}
public类另一个类,其中TBaseClass:BaseClass
{
公共void MyMethod(TBaseClass输入)
{ }
}
我对此有一个术语,希望不是冒犯性的。我称之为普通的疯狂兔子洞。这就是当我们尝试将泛型和继承结合起来,使一组类可以实现一系列越来越令人困惑的目标时所发生的情况,我们通过添加更多泛型参数和更多泛型类来解决这一问题
如果你-使用
-查看实际使用的类型是什么
GetType()
,typeof
,或者是什么
-让它编译,但不记得它应该做什么这将起作用(我的意思是它编译)
public void MyMethod()
其中T:BaseClass
{ }
这也是:
public void MyMethod<T>()
where T : ChildClass1
{ }
public void MyMethod()
T:ChildClass1在哪里
{ }
阅读您的评论后进一步编辑
您可以这样做:
public class AnotherClass<TBaseClass, TModel> where TBaseClass : BaseClass<TModel>
{
public void MyMethod(TBaseClass input)
{ }
}
public类另一个类,其中TBaseClass:BaseClass
{
公共void MyMethod(TBaseClass输入)
{ }
}
我对此有一个术语,希望不是冒犯性的。我称之为普通的疯狂兔子洞。这就是当我们尝试将泛型和继承结合起来,使一组类可以实现一系列越来越令人困惑的目标时所发生的情况,我们通过添加更多泛型参数和更多泛型类来解决这一问题
如果你
-使用
-查看实际使用的类型是什么GetType()
,typeof
,或者是什么
-让它编译,但不记得它应该做什么如果我理解正确,请尝试过滤“MyMethod”,使t是“ChildClass…”类型的类
您可以向函数中添加一个通用参数,如下所示:
MyMethod<ChildClass1>();
public void MyMethod<T, U>()
where T : BaseClass<U>
{
}
public void MyMethod()
其中T:BaseClass
{
}
但是你必须用那种方式调用MyMethod
MyMethod<ChildClass1, MyModel1>();
MyMethod();
所以它的使用相当复杂
另一个解决方案是创建一个新的“blank”类:
公共抽象类基类//如果不需要在代码中使用,请将其标记为抽象类
{
}
公共类MyModel1
{
}
公共类MyModel2
{
}
公共类BaseClass:Base//该类继承新类
{
}
公共类ChildClass1:基类
{
}
公共类ChildClass2:基类
{
}
公共类另一类
{
公共方法()
其中T:Base
{
}
}
如果我理解正确,您可以尝试过滤“MyMethod”,使T是“ChildClass…”类型的类
您可以向函数中添加一个通用参数,如下所示:
MyMethod<ChildClass1>();
public void MyMethod<T, U>()
where T : BaseClass<U>
{
}
public void MyMethod()
其中T:BaseClass
{
}
但是你必须用那种方式调用MyMethod
MyMethod<ChildClass1, MyModel1>();
MyMethod();
所以它的使用相当复杂
另一个解决方案是创建一个新的“blank”类:
公共抽象类基类//如果不需要在代码中使用,请将其标记为抽象类
{
}
公共类MyModel1
{
}
公共类MyModel2
{
}
公共类BaseClass:Base//该类继承新类
{
}
公共类ChildClass1:基类
{
}
公共类ChildClass2:基类
{
}
公共类另一类
{
公共方法()
其中T:Base
{
}
}
您的意思是其中T:BaseClass
?方法也缺少返回类型或无效。已编辑并添加了返回类型。不,看起来,where T:BaseClass
不是我要找的。你是说where T:BaseClass
?方法也缺少返回类型或无效。已编辑并添加了返回类型。不,它看起来像,其中T:BaseClass
不是我想要的。编辑并添加了返回类型。不,它看起来像,其中T:BaseClass
不是我想要的。编辑并添加了返回类型。不,看起来,其中T:BaseClass
不是我想要的。是的,它们确实有效。但接下来我需要为所有MyModels(第一种方式)或所有ChildClass(第二种方式)编写MyMethod。这就是为什么我要找一些通用的东西是的,它们确实有用。但接下来我需要为所有MyModels(第一种方式)或所有ChildClass(第二种方式)编写MyMethod。这就是为什么我要找一些通用的汉克斯。我也在考虑同样的事情(创建另一个基类)作为