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协方差和不变性仅适用于接口和委托类型,而不适用于类类型。