c#程序设计中怎么自定义显示或隐示转换,让类赋值时,可以直接复制不用转换
namespace ConsoleApp1
{
public class Program
{
static void Main(string[] args)
{
}
public void IO()
{
//正常
pr pr = new pr();
pr2 pr2 = new pr2();
pr2 pr21= pr;
//写上我们的显示转换后 就不会报错了
}
}
public class pr
{
public int MyProperty { get; set; }
public static implicit operator pr2(pr pr)//implicit 显示转化
{
pr2 pr2 = new pr2();
pr2.MyProperty = pr.MyProperty;
return pr2;
}
//强制转换
//public static explicit operator pr(pr2 pr)//implicit 显示转化
//{
// pr pr2 = new pr();
// pr2.MyProperty = pr.MyProperty;
// return pr2;
//}
}
public class pr2
{
public int MyProperty { get; set; }
}
}
以下答案引用自GPT-3大模型,请合理使用:
一、自定义显示或隐藏转换
1. 实现IConvertible接口,重写转换函数。
2. 将要转换的对象定义为具体类型,如定义一个名为MyData的类,如下:
public class MyData : IConvertible
{
//实现转换函数
public TypeCode GetTypeCode()
{
return TypeCode.Object;
}
public bool ToBoolean(IFormatProvider provider)
{
return false;
}
public byte ToByte(IFormatProvider provider)
{
return 0;
}
public char ToChar(IFormatProvider provider)
{
throw new InvalidCastException();
}
public DateTime ToDateTime(IFormatProvider provider)
{
throw new InvalidCastException();
}
public decimal ToDecimal(IFormatProvider provider)
{
throw new InvalidCastException();
}
public double ToDouble(IFormatProvider provider)
{
throw new InvalidCastException();
}
public short ToInt16(IFormatProvider provider)
{
throw new InvalidCastException();
}
public int ToInt32(IFormatProvider provider)
{
return 123;
}
public long ToInt64(IFormatProvider provider)
{
throw new InvalidCastException();
}
public object ToType(Type conversionType, IFormatProvider provider)
{
return Convert.ChangeType(this.ToString(), conversionType);
}
public sbyte ToSByte(IFormatProvider provider)
{
throw new InvalidCastException();
}
public float ToSingle(IFormatProvider provider)
{
throw new InvalidCastException();
}
public string ToString(IFormatProvider provider)
{
return "Hello World";
}
public ushort ToUInt16(IFormatProvider provider)
{
throw new InvalidCastException();
}
public uint ToUInt32(IFormatProvider provider)
{
throw new InvalidCastException();
}
public ulong ToUInt64(IFormatProvider provider)
{
throw new InvalidCastException();
}
}
3. 然后在使用时可以将其转换成指定类型,如int:
MyData data = new MyData();
int value = (int)data;
Console.WriteLine("value=" + value);
二、实现赋值时直接复制不用转换
1. 重写System.Object类的Equals()方法和GetHashCode()方法,实现对象的对比和HashCode的生成:
public override bool Equals (object obj)
{
//进行类型判断并进行内容比较
if (this.GetType () == obj.GetType())
{
MyData mData = (MyData)obj;
//这里可以根据自定义的需求进行内容比较
if (this.Name == mData.Name && this.Age == mData.Age)
return true;
else
return false;
}
else
return false;
}
public override int GetHashCode ()
{
如果我的回答解决了您的问题,请采纳我的回答