using System;␍␊ |
using System.Collections.Generic;␍␊ |
using System.Linq;␍␊ |
using System.Text;␍␊ |
␍␊ |
namespace object1␍␊ |
{␍␊ |
class variant␍␊ |
{␍␊ |
protected enum V_TYPE␍␊ |
{␍␊ |
INT,␍␊ |
FLOAT,␍␊ |
STRING,␍␊ |
DOUBLE,␍␊ |
OBJECT,␍␊ |
NULL␍␊ |
};␍␊ |
␍␊ |
protected V_TYPE TYPE;␍␊ |
protected object data;␍␊ |
␍␊ |
protected void setData(object o, V_TYPE t)␍␊ |
{␍␊ |
TYPE = t;␍␊ |
data = o;␍␊ |
}␍␊ |
␍␊ |
public variant(int val)␍␊ |
{␍␊ |
setData(val, V_TYPE.INT);␍␊ |
}␍␊ |
␍␊ |
public variant(float f)␍␊ |
{␍␊ |
setData(f, V_TYPE.FLOAT);␍␊ |
}␍␊ |
␍␊ |
public variant(string s)␍␊ |
{␍␊ |
setData(s, V_TYPE.STRING);␍␊ |
}␍␊ |
␍␊ |
public variant(double d)␍␊ |
{␍␊ |
setData(d, V_TYPE.DOUBLE);␍␊ |
}␍␊ |
␍␊ |
public variant(variant v)␍␊ |
{␍␊ |
setData(v.data, v.TYPE);␍␊ |
}␍␊ |
␍␊ |
public variant()␍␊ |
{␍␊ |
setData(null, V_TYPE.NULL);␍␊ |
}␍␊ |
␍␊ |
public static implicit operator variant(int i)␍␊ |
{␍␊ |
return new variant(i);␍␊ |
}␍␊ |
␍␊ |
public static implicit operator variant(float f)␍␊ |
{␍␊ |
return new variant(f);␍␊ |
}␍␊ |
␍␊ |
public static implicit operator variant(double d)␍␊ |
{␍␊ |
return new variant(d);␍␊ |
}␍␊ |
␍␊ |
public static implicit operator variant(string s)␍␊ |
{␍␊ |
return new variant(s);␍␊ |
}␍␊ |
␍␊ |
public static implicit operator int(variant v)␍␊ |
{␍␊ |
switch (v.TYPE)␍␊ |
{␍␊ |
case V_TYPE.INT:␍␊ |
case V_TYPE.FLOAT:␍␊ |
case V_TYPE.DOUBLE:␍␊ |
case V_TYPE.OBJECT:␍␊ |
return (int)v.data;␍␊ |
case V_TYPE.STRING:␍␊ |
return int.Parse((string)v.data);␍␊ |
default:␍␊ |
return 0;␍␊ |
}␍␊ |
}␍␊ |
␍␊ |
public static implicit operator float(variant v)␍␊ |
{␍␊ |
switch (v.TYPE)␍␊ |
{␍␊ |
case V_TYPE.INT:␍␊ |
case V_TYPE.FLOAT:␍␊ |
case V_TYPE.DOUBLE:␍␊ |
case V_TYPE.OBJECT:␍␊ |
return (float)v.data;␍␊ |
case V_TYPE.STRING:␍␊ |
return float.Parse((string)v.data);␍␊ |
default:␍␊ |
return 0;␍␊ |
}␍␊ |
}␍␊ |
␍␊ |
public static implicit operator double(variant v)␍␊ |
{␍␊ |
switch (v.TYPE)␍␊ |
{␍␊ |
case V_TYPE.INT:␍␊ |
case V_TYPE.FLOAT:␍␊ |
case V_TYPE.DOUBLE:␍␊ |
case V_TYPE.OBJECT:␍␊ |
return (double)v.data;␍␊ |
case V_TYPE.STRING:␍␊ |
return double.Parse((string)v.data);␍␊ |
default:␍␊ |
return 0;␍␊ |
}␍␊ |
}␍␊ |
␍␊ |
public static implicit operator string(variant v)␍␊ |
{␍␊ |
switch (v.TYPE)␍␊ |
{␍␊ |
case V_TYPE.INT:␍␊ |
return ((int)v.data).ToString();␍␊ |
case V_TYPE.DOUBLE:␍␊ |
return ((double)v.data).ToString();␍␊ |
case V_TYPE.FLOAT:␍␊ |
return ((float)v.data).ToString();␍␊ |
case V_TYPE.OBJECT:␍␊ |
return ((object)v.data).ToString();␍␊ |
case V_TYPE.STRING:␍␊ |
return (string)v.data;␍␊ |
default:␍␊ |
return "";␍␊ |
}␍␊ |
}␍␊ |
␍␊ |
public static variant operator +(variant v, int i)␍␊ |
{␍␊ |
switch (v.TYPE)␍␊ |
{␍␊ |
case V_TYPE.INT:␍␊ |
return new variant((int)v.data + i);␍␊ |
case V_TYPE.FLOAT:␍␊ |
return new variant((float)v.data + i);␍␊ |
case V_TYPE.DOUBLE:␍␊ |
return new variant((double)v.data + i);␍␊ |
case V_TYPE.STRING:␍␊ |
return new variant((string)v.data + i.ToString());␍␊ |
default:␍␊ |
return new variant();␍␊ |
}␍␊ |
}␍␊ |
␍␊ |
public static variant operator +(variant v, float i)␍␊ |
{␍␊ |
switch (v.TYPE)␍␊ |
{␍␊ |
case V_TYPE.INT:␍␊ |
return new variant((int)v.data + i);␍␊ |
case V_TYPE.FLOAT:␍␊ |
return new variant((float)v.data + i);␍␊ |
case V_TYPE.DOUBLE:␍␊ |
return new variant((double)v.data + i);␍␊ |
case V_TYPE.STRING:␍␊ |
return new variant((string)v.data + i.ToString());␍␊ |
default:␍␊ |
return new variant();␍␊ |
}␍␊ |
}␍␊ |
␍␊ |
public static variant operator +(variant v, double i)␍␊ |
{␍␊ |
switch (v.TYPE)␍␊ |
{␍␊ |
case V_TYPE.INT:␍␊ |
return new variant((int)v.data + i);␍␊ |
case V_TYPE.FLOAT:␍␊ |
return new variant((float)v.data + i);␍␊ |
case V_TYPE.DOUBLE:␍␊ |
return new variant((double)v.data + i);␍␊ |
case V_TYPE.STRING:␍␊ |
return new variant((string)v.data + i.ToString());␍␊ |
default:␍␊ |
return new variant();␍␊ |
}␍␊ |
}␍␊ |
␍␊ |
public static variant operator +(variant v, string i)␍␊ |
{␍␊ |
switch (v.TYPE)␍␊ |
{␍␊ |
case V_TYPE.INT:␍␊ |
return new variant((int)v.data + int.Parse(i));␍␊ |
case V_TYPE.FLOAT:␍␊ |
return new variant((float)v.data + float.Parse(i));␍␊ |
case V_TYPE.DOUBLE:␍␊ |
return new variant((double)v.data + double.Parse(i));␍␊ |
case V_TYPE.STRING:␍␊ |
return new variant((string)v.data + i);␍␊ |
default:␍␊ |
return new variant();␍␊ |
}␍␊ |
}␍␊ |
␍␊ |
public override string ToString()␍␊ |
{␍␊ |
switch (TYPE)␍␊ |
{␍␊ |
case V_TYPE.INT:␍␊ |
case V_TYPE.DOUBLE:␍␊ |
case V_TYPE.FLOAT:␍␊ |
case V_TYPE.STRING:␍␊ |
return (string)this;␍␊ |
default:␍␊ |
return "";␍␊ |
}␍␊ |
}␍␊ |
␍␊ |
}␍␊ |
class Program␍␊ |
{␍␊ |
static void Main(string[] args)␍␊ |
{␍␊ |
variant v = 5;␍␊ |
Console.WriteLine(v.ToString());␍␊ |
int x = v;␍␊ |
Console.WriteLine(x);␍␊ |
v += 10;␍␊ |
Console.WriteLine(v.ToString());␍␊ |
v += "10";␍␊ |
Console.WriteLine(v.ToString());␍␊ |
string s = v;␍␊ |
Console.WriteLine(s);␍␊ |
␍␊ |
x = 20;␍␊ |
v = x;␍␊ |
s = v;␍␊ |
x = v;␍␊ |
Console.WriteLine("{0} - {1} - {2}", x, v, s);␍␊ |
␍␊ |
/*object var1, var2, var3;␍␊ |
var1 = 4;␍␊ |
var2 = 5;␍␊ |
var3 = var1 + var2;*/␍␊ |
␍␊ |
}␍␊ |
}␍␊ |
}␍␊ |