C#两个自定义类型的变量怎么互相转换
答案:4 悬赏:30 手机版
解决时间 2021-02-23 06:08
- 提问者网友:锁深秋
- 2021-02-22 10:11
C#两个自定义类型的变量怎么互相转换
最佳答案
- 五星知识达人网友:英雄的欲望
- 2021-02-22 11:12
子类可以隐式转换为父类。
父类不能隐式转换为子类。
你可以自定义类型转换。
===========================================
本来不想在这里多解释了。不过既然有同学看不懂,那么我还是简单介绍一下C#的基础知识之一:Operators Overloading。
中文叫运算符重载,我相信不少同学知道这个特性,对于重载+,-,==,!=等运算符或许还在学习的时候做过例子。
普通的括号是不能被overload的,但是作为类型强制转换的运算符却是可以被重载的。
打个比方说,ClassA和ClassB毫无关联,所以当你如下写:
ClassA ca = new ClassA();
ClassB cb = ca;
肯定会连编译都通不过,因为在类型检查的时候就报错了。
如果你将第二行改为
ClassB cb = (ClassB)ca;
同样不会通过编译。
但是我们可以重载隐式转换来使之可以通过。
例子我也就不举了,我以MSDN的例子来说明:
===================
class Celsius {
public Celsius(float temp) {
degrees = temp;
}
public static explicit operator Fahrenheit(Celsius c) {
return new Fahrenheit((9.0f / 5.0f) * c.degrees + 32);
}
public float Degrees {
get { return degrees; }
}
private float degrees;
}
class Fahrenheit {
public Fahrenheit(float temp) {
degrees = temp;
}
public static explicit operator Celsius(Fahrenheit f) {
return new Celsius((5.0f / 9.0f) * (f.degrees - 32));
}
public float Degrees {
get { return degrees; }
}
private float degrees;
}
class MainClass {
static void Main() {
Fahrenheit f = new Fahrenheit(100.0f);
Console.Write("{0} fahrenheit", f.Degrees);
Celsius c = (Celsius)f;
Console.Write(" = {0} celsius", c.Degrees);
Fahrenheit f2 = (Fahrenheit)c;
Console.WriteLine(" = {0} fahrenheit", f2.Degrees);
}
}
父类不能隐式转换为子类。
你可以自定义类型转换。
===========================================
本来不想在这里多解释了。不过既然有同学看不懂,那么我还是简单介绍一下C#的基础知识之一:Operators Overloading。
中文叫运算符重载,我相信不少同学知道这个特性,对于重载+,-,==,!=等运算符或许还在学习的时候做过例子。
普通的括号是不能被overload的,但是作为类型强制转换的运算符却是可以被重载的。
打个比方说,ClassA和ClassB毫无关联,所以当你如下写:
ClassA ca = new ClassA();
ClassB cb = ca;
肯定会连编译都通不过,因为在类型检查的时候就报错了。
如果你将第二行改为
ClassB cb = (ClassB)ca;
同样不会通过编译。
但是我们可以重载隐式转换来使之可以通过。
例子我也就不举了,我以MSDN的例子来说明:
===================
class Celsius {
public Celsius(float temp) {
degrees = temp;
}
public static explicit operator Fahrenheit(Celsius c) {
return new Fahrenheit((9.0f / 5.0f) * c.degrees + 32);
}
public float Degrees {
get { return degrees; }
}
private float degrees;
}
class Fahrenheit {
public Fahrenheit(float temp) {
degrees = temp;
}
public static explicit operator Celsius(Fahrenheit f) {
return new Celsius((5.0f / 9.0f) * (f.degrees - 32));
}
public float Degrees {
get { return degrees; }
}
private float degrees;
}
class MainClass {
static void Main() {
Fahrenheit f = new Fahrenheit(100.0f);
Console.Write("{0} fahrenheit", f.Degrees);
Celsius c = (Celsius)f;
Console.Write(" = {0} celsius", c.Degrees);
Fahrenheit f2 = (Fahrenheit)c;
Console.WriteLine(" = {0} fahrenheit", f2.Degrees);
}
}
全部回答
- 1楼网友:煞尾
- 2021-02-22 13:58
两个类如果不是同一种自定义类型的类的话,就不能进行转换会出错。
不过类中的值给以付给第二个类。例如 定义了两个类
Book book =new Book();BorrowInfo borrowInfo=new BorrowInfo() ; 其中book有ID属性是字符串窜类型 borrowInfo也有一个NameID属性类型为字符串。那么可以进行book.ID= borrowInfo.NameID;操作,但是不能进行
Book book = new Book();
BorrowInfo borrowInfo = (BorrowInfo)book ;
这样的操作。
不过类中的值给以付给第二个类。例如 定义了两个类
Book book =new Book();BorrowInfo borrowInfo=new BorrowInfo() ; 其中book有ID属性是字符串窜类型 borrowInfo也有一个NameID属性类型为字符串。那么可以进行book.ID= borrowInfo.NameID;操作,但是不能进行
Book book = new Book();
BorrowInfo borrowInfo = (BorrowInfo)book ;
这样的操作。
- 2楼网友:像个废品
- 2021-02-22 13:39
我想 1# 说的不对
“子类可以隐式转换为父类。父类不能隐式转换为子类。你可以自定义类型转换。”
我只听说过 子类继承父类。父类是子类的通用,而并没有听过“自定义类型转换<真不理解你说的这个是什么意思?这和 变量转换有什么关系?>”
楼主的
BorrowInfo borrowInfo = Book book;
应该是报错的!
你可以试验下这样写
Book book = new Book();
BorrowInfo borrowInfo =(BorrowInfo)book;我想 你的 Book 和BorrowInfo 里面的字段应该有相互依赖或者相同的字段之类的?你最好把2个类中的字段说明下!
“子类可以隐式转换为父类。父类不能隐式转换为子类。你可以自定义类型转换。”
我只听说过 子类继承父类。父类是子类的通用,而并没有听过“自定义类型转换<真不理解你说的这个是什么意思?这和 变量转换有什么关系?>”
楼主的
BorrowInfo borrowInfo = Book book;
应该是报错的!
你可以试验下这样写
Book book = new Book();
BorrowInfo borrowInfo =(BorrowInfo)book;我想 你的 Book 和BorrowInfo 里面的字段应该有相互依赖或者相同的字段之类的?你最好把2个类中的字段说明下!
- 3楼网友:一秋
- 2021-02-22 12:13
你可以写成
Book book = new Book();
BorrowInfo borrowInfo = (BorrowInfo)book ;
看有用没~~~
Book book = new Book();
BorrowInfo borrowInfo = (BorrowInfo)book ;
看有用没~~~
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯