GetType和typeof的区别 以及一个小实例

GetType和typeof的区别 以及一个小实例

GetType和typeof的区别

typeof: The typeof operator is used to obtain the System.Type object for a type.

 

运算符,获得某一类型的 System.Type 对象。

 

Type t = typeof(int);

 

 

 

GetType: Gets the Type of the current instance.

 

            方法,获取当前实例的类型

 

             int i = 10;
Console.WriteLine(i.GetType());

 

 

区别:

 

  • Typeof()是运算符而GetType是方法
  • GetType()是基类System.Object的方法,因此只有建立一个实例之后才能够被调用(初始化以后)
  • Typeof()的参数只能是int,string,String,自定义类型,且不能是实例

     

  • GetType() typeof()都返回System.Type的引用。

     

    TypeOf() 和GetType()的区别:  

    (1)TypeOf():得到一个Class的Type

    (2)GetType():得到一个Class的实例的Type

    override 一个方法的前担是这个方法在父类中:abstract or  virtual, override

 

 

 

GetType():获取当前实例的System.Type.

 现在有两个类:Student 和 StudentDTO如下:

Student类::

public
 
class
 Student
    {

        

public
 Student()
        { 
        
        }

        
public
 
virtual
 
string
 Id { 
get

set
; }

        
public
 
virtual
 
string
 StudentNo { 
get

set
; }

        
public
 
virtual
 
string
 Name { 
get

set
; }

        
public
 
virtual
 
string
 ClassId { 
get

set
; }

        
public
 
virtual
 
string
 ProfessionId { 
get

set
; }

        
public
 
virtual
 
string
 CollegeId { 
get

set
; }

        
public
 
virtual
 
int
 Phone { 
get

set
; }

        
public
 
virtual
 
int
 Sex { 
get

set
; }

        
public
 
virtual
 
string
 Address { 
get

set
; }
    }

StudentDTO类:

public
 
class
 StudentDTO
    {

       

public
 StudentDTO()
       { 

       }
       
public
 
virtual
 
string
 Id { 
get

set
; }

       
public
 
virtual
 
string
 StudentNo { 
get

set
; }

       
public
 
virtual
 
string
 Name { 
get

set
; }

       
public
 
virtual
 
string
 ClassId { 
get

set
; }

       
public
 
virtual
 
string
 ProfessionId { 
get

set
; }

       
public
 
virtual
 
string
 CollegeId { 
get

set
; }

       
public
 
virtual
 
int
 Phone { 
get

set
; }

       
public
 
virtual
 
int
 Sex { 
get

set
; }

       
public
 
virtual
 
int
 TeacherId { 
get

set
; }
    }

现在创建一个Student:

            Student student 
=
 
new
 Student();
            student.Id 

=
 Guid.NewGuid().ToString();
            student.Name 

=
 

张三

;
            student.StudentNo 

=
 

T001

;
            student.Phone 

=
 
10086
;
            student.Sex 

=
 
1
;
            student.CollegeId 

=
 Guid.NewGuid().ToString();
            student.ClassId 

=
 Guid.NewGuid().ToString();
            student.ProfessionId 

=
 Guid.NewGuid().ToString();
            student.Address 

=
 

福建

;

现在创建一个Student的DTO类StudentDTO并把Student的信息赋给StudentDTO,常用的方法是:

            StudentDTO studentDTO 
=
 
new
 StudentDTO();
            studentDTO.Id 

=
 student.Id;
            studentDTO.Name 

=
 student.Name;
            studentDTO.StudentNo 

=
 student.StudentNo;
            studentDTO.Phone 

=
 student.Phone;
            studentDTO.Sex 

=
 student.Sex;
            studentDTO.CollegeId 

=
 student.CollegeId;
            studentDTO.ClassId 

=
 student.ClassId;
            studentDTO.ProfessionId 

=
 student.ProfessionId; 

而使用GetType()也可以实现:

            
foreach
 (var item 
in
 student.GetType().GetProperties())    
//
返回Student的所有公共属性


            {

                var value 

=
 item.GetValue(student, 
null
);   
//
返回属性值    


                var setobj 
=
 studentDTO.GetType().GetProperty(item.Name);   
//
搜索具有指定属性名称的公共属性


                
if
 (value 
!=
 
null
 
&&
 setobj 
!=
 
null
)
                {

                    setobj.SetValue(studentDTO, value, 

null
);
                }
            }

这样看起来代码会简洁些……呵呵,只是个人感觉这个GetType()方法挺好用的就记录起来了…….

 
在利用多态性时,GetType()是一个有用的方法,允许根据对象的类型来执行不同的代码,而不是像通常那样,对所有的对象都执行相同的代码,
例如,如果一个函数接受一个object类型的参数,就可以在遇到某些对象时执行额外的任务,联合使用getype() 和 typeof() ,就可以进行比较,如下所示:
 
if(myobj.GetType() == typeof(MyComplexClass))
{
//….
}

转载于:https://www.cnblogs.com/eagle1986/archive/2011/11/26/2264739.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/110509.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • gdi+ 高速绘制透明窗体

    gdi+ 高速绘制透明窗体

    2021年12月7日
    57
  • pycharm激活码 2021(注册激活)

    (pycharm激活码 2021)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html1435QFILVV-eyJsaWNlbnNlSWQi…

    2022年3月30日
    365
  • Eureka集群配置

    Eureka集群配置eureka作为注册中心,生产环境必须多节点部署,保证其高可用性。现以两台服务器来完成集群部署。服务器A:172.16.21.34服务器B:172.16.21.35方式一:使用ip形式完成。服务器A:172.16.21.34server:port:7777spring:application:name:register#指定eureka客户端的登录账户security:user:…

    2022年5月1日
    46
  • 计算机中位数求和方法总结例题,众数与中位数典型例题「建议收藏」

    计算机中位数求和方法总结例题,众数与中位数典型例题「建议收藏」《众数与中位数典型例题》由会员分享,可在线阅读,更多相关《众数与中位数典型例题(3页珍藏版)》请在人人文库网上搜索。1、典型例题例1求下列数据的众数(1)3,2,5,3,1,2,3(2)5,2,1,5,3,5,2,2分析:一组数据的众数不一定唯一,因此,如果一组数据中有几个数据重复的次数相同,并且次数是最高的,那么这几个数据都是这组数据的众数解:(1)众数是3(2)众数是5和2说明:众数是一组数…

    2025年11月26日
    4
  • java中map转json[通俗易懂]

    java中map转json[通俗易懂]在日常的使用中,我们一般会遇到map转json,如果遍历的话会浪费大量的时间,其实我们拥有这样的jar包Themethod ***isundefinedforthetypeJSONObject缺哪个包——json-lib.jar这样还是不行的需要一个依赖的jar包要不然会报错java.lang.ClassNotFoundException:

    2022年6月20日
    57
  • SwiftUI iOS 提示组件之 成功完成动画提示框Alert Toast弹窗(教程含源码)

    SwiftUI iOS 提示组件之 成功完成动画提示框Alert Toast弹窗(教程含源码)实战需求SwiftUIiOS提示组件之成功完成动画提示框AlertToast弹窗本文价值与收获看完本文后,您将能够作出下面的界面看完本文您将掌握的技能用法很简单.alertDialog视图修饰符。2秒钟后,警报将被消除或通过点击警报视图来解除。分配状态变量以显示参数。默认持续时间为2。返回AlertToast并完成以下参数:type,title和subTitle(可选)。实战代码1、主界面importSwiftUIstructContentView:Vie

    2022年9月24日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号