泛型类::类型参数<T>属性继承



我的代码:

class ClassX;
class Class2 : ClassX;
class Class3 : ClassX;

Class2和Class3除了共享同一个基类外,彼此之间没有任何关联。Class2和Class3不共享相同的属性、数据类型或属性数量。

现在,我想要做的是:

class Class<T> : T;
static void Main()
{
    Class<Class2> foo = new Class<Class2>();
    foo.Class2_Property = value;
    Console.Read();
}

我知道这段代码是不可能的,但是有任何工作吗?

在c++中,您可以使用操作符重载来实现如下操作:

public : operator return_data_type const;    

提前感谢。

PS:我已经在这里开了一个关于这个的问题,但我不确定如何问我的问题,但我现在。我把它打开了,以防有人从我得到的答案中找到他们问题的答案。

编辑# 1:

我有一个包类,它有共享的包属性和方法,不同的包有自己的头和不同的内容。我正在改变我的包系统。基本上,我想做数据包,其中PacketClass是特定数据包的名称,例如LoginInfo。LoginInfo类将包含以下属性:

public PacketHeader Header;
public string Username;
public string Password;
因此:

    Packet<LoginInfo> foo = new Packet<LoginInfo>();
    foo.Username = "user";
    byte[] buf = foo.ToArray(); // Part of the Packet<T> class

这就是我说的每个类都有它自己的属性。我希望这能让你们对我要做的事情有一个很好的了解

您可能想要完全重新考虑您的实现,因为这不是c#的设计目的。您可以做一些hack的事情来使它工作,但是它不是很漂亮:

class Class<T> where T : new()
{
    public T Value = new T();
}

这为你的'基'类型创建了一个'容器',依赖于类型T必须有一个无参数构造函数的约束。

那么你可以这样做:

class ClassX {}
class Class2 : ClassX 
{ 
    public int test = 10;
}

然后你可以像这样使用你的伪'派生'类:

Class<Class2> foo = new Class<Class2>();
var test = foo.Value.test;

您还必须在Class2上设置您感兴趣的任何字段,以便此工作

你不能用c#做你想做的事情,但你不应该这样做。
这是设计问题。数据包不是数据包内容。它包含一些标题和一些内容:

interface IPacketItem
{
    byte[] ToArray();
}
class Packet<THeader, TContent>
    where THeader : IPacketItem
    where TContent : IPacketItem
{
    // header and content must be initialized somehow;
    // maybe, using existing instances, maybe using new() constraint
    public THeader Header { get; private set; }
    public TContent Content { get; private set; }
    public byte[] ToArray()
    {
        // builds an array using IPacketItem.ToArray
    }
}
var loginPacket = new Packet<PacketHeader, LoginInfo>();
loginPacket.Content.UserName = "user";

最新更新