C# 铸造类<;对象>;上课<;T>;
我们有一个名为C# 铸造类<;对象>;上课<;T>;,c#,.net,casting,C#,.net,Casting,我们有一个名为Context的泛型类,其中T:class,并创建另一个类Message,与前一个类一起用作Context。 一般来说,我们想知道是否有办法将上下文转换回上下文。 我们可以检查对象是否为Message类型, 但是做Context=(Context)otherContext其中otherContext是上下文 这在某种程度上是可能的吗?如果您更喜欢cast,请尝试以下方法: class YourClass<T> where T : class { public s
Context的泛型类,其中T:class
,并创建另一个类Message
,与前一个类一起用作Context
。
一般来说,我们想知道是否有办法将上下文
转换回上下文
。
我们可以检查对象是否为Message类型,
但是做Context=(Context)otherContext代码>其中otherContext是上下文
这在某种程度上是可能的吗?如果您更喜欢cast,请尝试以下方法:
class YourClass<T> where T : class
{
public static implicit operator YourClass<T>(YourClass<object> instance)
{
// Create YourClass<T> from YourClass<object>
// e.g. return new YourClass<T>(...)
}
}
var obj = new YourClass<object>();
YourClass<Message> msg = obj;
classyourclass其中T:class
{
公共静态隐式运算符YourClass(YourClass实例)
{
//从类创建类
//例如,返回新的YourClass(…)
}
}
var obj=新的YourClass();
YourClass msg=obj;
否则,您可以创建一个构造函数:
class YourClass<T> where T : class
{
public YourClass(YourClass<object> obj)
{
}
}
classyourclass其中T:class
{
公共YourClass(YourClass obj)
{
}
}
或者您可以两者兼有。如果您更喜欢cast,请尝试以下方法:
class YourClass<T> where T : class
{
public static implicit operator YourClass<T>(YourClass<object> instance)
{
// Create YourClass<T> from YourClass<object>
// e.g. return new YourClass<T>(...)
}
}
var obj = new YourClass<object>();
YourClass<Message> msg = obj;
classyourclass其中T:class
{
公共静态隐式运算符YourClass(YourClass实例)
{
//从类创建类
//例如,返回新的YourClass(…)
}
}
var obj=新的YourClass();
YourClass msg=obj;
否则,您可以创建一个构造函数:
class YourClass<T> where T : class
{
public YourClass(YourClass<object> obj)
{
}
}
classyourclass其中T:class
{
公共YourClass(YourClass obj)
{
}
}
或者你可以两者都有。仅仅因为两种类型T1
和T2
具有特定的继承关系,这并不意味着用这两种类型(G
和G
)参数化的泛型显示相同的继承关系。Class
与Class
不同。创建一个新的类
实例,并将消息
参数(从obejct
转换)放入ctor。有,但是你必须修改类
源代码如果你能使它成为“公共类上下文”,那么你应该被允许进行转换。但是,这会限制“Context”类中如何使用“T”。如果你想知道更多,搜索协方差和不变性。关于这方面的大量信息。@Knoop协方差和不变性仅适用于接口和委托类型,而不是类类型。仅仅因为两种类型T1
和T2
具有特定的继承关系,这并不意味着泛型参数化了这两种类型(G
和G
)显示相同的继承关系。Class
与Class
不同。创建一个新的类
实例,并将消息
参数(从obejct
转换)放入ctor。有,但是你必须修改类
源代码如果你能使它成为“公共类上下文”,那么你应该被允许进行转换。但是,这会限制“Context”类中如何使用“T”。如果你想知道更多,搜索协方差和不变性。关于这方面的大量信息。@Knoop协方差和不变性仅适用于接口和委托类型,而不适用于类类型。