Phi*_*hil 7 c# generics constructor
这是构造函数:
public PartyRoleRelationship(PartyRole firstRole, PartyRole secondRole)
{
if (firstRole == secondRole)
throw new Exception("PartyRoleRelationship cannot relate a single role to itself.");
if (firstRole.OccupiedBy == null || secondRole.OccupiedBy == null)
throw new Exception("One or both of the PartyRole parameters is not occupied by a party.");
// Connect this relationship with the two roles.
_FirstRole = firstRole;
_SecondRole = secondRole;
T = _FirstRole.GetType().MakeGenericType();
_SecondRole.ProvisionRelationship<T>(_FirstRole); // Connect second role to this relationship.
}
Run Code Online (Sandbox Code Playgroud)
在最后一行,它在_SecondRole上调用ProvisionRelationship,它给了我运行时错误:无法找到类型或命名空间'T'...
我如何(a)正确分配T,或(b)通过构造函数传递泛型?我一直在查看相当多的帖子,但可能由于缺乏理解而遗漏了一些内容.任何人对此的帮助将不胜感激.
Che*_*ron 12
你的班级必须是通用的.所以PartyRoleRelationship需要看起来像这样:
public class PartyRoleRelationship<T>
{
public PartyRoleRelationship(T arg, ...)
{
}
}
Run Code Online (Sandbox Code Playgroud)
阅读更多关于泛型类的信息:
http://msdn.microsoft.com/en-us/library/sz6zd40f(v=vs.80).aspx
http://msdn.microsoft.com/en-us/library/ms379564(v=vs.80).aspx
编辑:
你可以简化你的代码,并像这样做:
public class RoleRelationship<T>
{
public RoleRelationship(T firstRole, T secondRole)
{
if (firstRole.OccupiedBy == null || secondRole.OccupiedBy == null)
throw new Exception("One or both of the Role parameters is not occupied by a party.");
// Connect this relationship with the two roles.
_FirstRole = firstRole;
_SecondRole = secondRole;
_SecondRole.ProvisionRelationship<T>(_FirstRole);
}
}
Run Code Online (Sandbox Code Playgroud)