我希望拥有基于标准类型的自己的类型。
例如,我想要类型Dzeta,它将作为int。
所以我想写这样的东西:
Dzeta i = 0;
i++;
等等。
有人可以告诉我,我该怎么做?
答案 0 :(得分:3)
您无法从任何值类型(struct)派生。 您只能创建自己的:
public struct Dzeta
{
}
此外,如果需要,您可以重载运算符:
public static Dzeta operator +(Dzeta dz1, Dzeta dz2)
{
return new Dzeta (/* some operations */);
}
你也可以重载强制转换操作符,这样就可以使用你的类使用int(自动完成强制转换):
public static explicit operator int(Dzeta d)
{
//return some int
}
然后
int a = new Dzeta(); //implicit cast was made!
答案 1 :(得分:1)
您需要使用基本运算符和转换的重载来创建自己的结构。
https://msdn.microsoft.com/ru-ru/library/aa288467(v=vs.71).aspx
答案 2 :(得分:0)
您可以从大多数类继承而不是基类型,因为它们是密封的。
看一下这篇文章: c# deriving from int32
阅读有关继承的信息也是一个好主意。如果你想使用C#:)等面向对象的语言,你将需要它。
答案 3 :(得分:0)
我使用扩展和覆盖来使类的行为像这样。
/* A class that behaves a lot like an int */
public class Dzeta
{
private int __dzeta;
public Dzeta() { }
public Dzeta(int i)
{
this.__dzeta = i;
}
public static Dzeta operator +(Dzeta a, Dzeta b)
{
var c = new Dzeta(a.__dzeta + b.__dzeta);
return c;
}
public static Dzeta operator -(Dzeta a, Dzeta b)
{
var c = new Dzeta(a.__dzeta - b.__dzeta);
return c;
}
public static Dzeta operator +(Dzeta a, int b)
{
var c = new Dzeta(a.__dzeta + b);
return c;
}
public static Dzeta operator -(Dzeta a, int b)
{
var c = new Dzeta(a.__dzeta - b);
return c;
}
public override string ToString()
{
return __dzeta.ToString();
}
}
/* Extend the int like behaviors of my DZeta class*/
public static class DZExtensions
{
public static Dzeta Sum(this Dzeta self, params Dzeta[] all)
{
var z = new Dzeta();
foreach (var dz in all)
z += dz;
return z;
}
public static Dzeta Sum(this Dzeta self, params int[] all)
{
var z = new Dzeta();
foreach (var dz in all)
z += dz;
return z;
}
}
/* This is how it can be used in the application*/
public class UsageOfDZeta
{
public void DoSomeDZetaWork()
{
var zz = new Dzeta(5);
System.Diagnostics.Debug.WriteLine(zz); // prints 5
zz += 15;
System.Diagnostics.Debug.WriteLine(zz); // prints 20
zz.Sum(10, 5, 20, 5);
System.Diagnostics.Debug.WriteLine(zz); // prints 60
}
}