我有一个CreateMessage class
用于处理来自a的传入消息TCPClient
,获取用户类型并返回消息应如何格式化为其调用method
.
在该方法中GetUserType
,我想UserBaseType
作为参数传递,这是一个generic abstract class
需要Type
的UserType
.但是,它给了我错误:
使用泛型类型'UserTypeBase'需要一个类型参数.
我仍然试图用泛型和约束来包围我,所以我不知道我是否会以错误的方式解决这个问题.我已经做了一些挖掘尝试自己找到一个解决方案,但没有找到任何或多或少的裁缝我想要做的事情.
internal class CreateMessage
{
internal static string user;
internal static string message;
internal CreateMessage(string data)
{
user = Lists.users[data.Substring(1, 3)];
message = data.Substring(5, data.Length - 5);
}
private UserType GetUserType(UserTypeBase type)
{
return type.CreateType();
}
internal string Message()
{
UserType Type = null;
if (user.Contains("[M]"))
Type = GetUserType(UserMod);
else if (user.Contains("[B]"))
Type = GetUserType(UserVIP);
else
Type = GetUserType(UserRegular);
return Type.Message();
}
}
Run Code Online (Sandbox Code Playgroud)
UserBaseType.cs
internal abstract class UserTypeBase<T> where T: UserType
{
public abstract string User { get; }
public abstract string Message { get; }
public abstract T CreateType();
}
Run Code Online (Sandbox Code Playgroud)
您将要制作使参数通用的方法.您还希望镜像类型约束,因为它们出现在参数类型上以避免编译错误,并且明确了该方法的可接受性和不可接受性.
private T GetUserType<T>(UserTypeBase<T> type) where T : UserType
{
return type.CreateType();
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用显式或隐式提供的类型调用它,具体取决于具体情况.
var someType = new UserTypeDerived<UserType>();
var resultImplicit = GetUserType(someType);
var resultExplicit = GetUserType<UserType>(someType);
Run Code Online (Sandbox Code Playgroud)
由于它是一般使用的参数,因此编译器可以T
根据提供的参数类型隐式确定期望值是什么.
归档时间: |
|
查看次数: |
4400 次 |
最近记录: |