我是c#的新手,我刚刚完成huffman tree
,现在下一步就是generic
我的意思是symbol
适用于每个data type
。由于我是c#beginner,我需要一些基本的想法来做到这一点。
我的霍夫曼树由3个班级组成。类huffman,node和MyClass(包含主函数),其中freq
是symbol
重复它们的结构的次数,如下所示:
namespace final_version_Csharp
{
public Class Huffman
{
public classNode
{
public Node next, left, right;
public int symbol;
public int freq;
}
public Node root;
}
public void huffman_node_processing()
{
//done the addition of two minimum freq here
}
public void GenerateCode(Node parentNode, string code)
{
//done the encoding work here
}
public class MyClass
{
public static void Main(string[] args)
{
Huffman ObjSym = new Huffman(args); //object creation by reading the data fron a file at sole argument
//All other methods are here
ObjSym.huffman_node_processing(); //this for adding the two minimum nodes
ObjSym.GenerateCode(ObjSym.root, ""); //this for encoding
}
}
}
有人可以帮助我使这个“符号”适用于所有数据类型,如“短”,“长”等。
答案 0 :(得分:2)
如果我理解正确,你基本上会做类似
的事情namespace final_version_Csharp
{
public Class Huffman<K> where K : IComparable<K>
{
public classNode<K>
{
public Node next, left, right;
public K symbol;
public int freq;
}
public Node root;
}
...
public class MyClass
{
public static void Main(string[] args)
{
Huffman ObjSym = new Huffman<int>();
//All other methods are here
ObjSym.huffman_node_processing(); //this for adding the two minimum nodes
ObjSym.GenerateCode(ObjSym.root, ""); //this for encoding
}
}
}
答案 1 :(得分:1)
您需要在此处使用interface
public interface IMyType
{
int Symbol { get; set; }
int Freq { get; set; }
}
然后将其用于您希望能够一般使用的所有类。所以
public class ClassA : IMyType
{
...
public int Symbol { get; set; }
public int Freq { get; set; }
...
}
public class ClassB : IMyType
{
...
public int Symbol { get; set; }
public int Freq { get; set; }
...
}
然后你可以在像这样的方法中使用这些对象
void SomeMethod(IMyType o)
{
o.Symbol = 1;
o.Freq = 2;
...
}
IMyType a = new ClassA();
IMyType b = new ClassB();
SomeMethod(a);
SomeMethod(b);
我希望这会有所帮助。