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)
上一篇 2021年8月15日 下午2:00
下一篇 2021年8月15日 下午3:00


相关推荐

  • 软件安全实验——局域网DDoS攻击

    软件安全实验——局域网DDoS攻击实验任务 对局域网内 IP 地址为 10 12 186 186 的主机 已关闭防火墙 发起基于网络流量的 DDoS 攻击

    2026年3月26日
    2
  • 从tracker上获取peer列表[通俗易懂]

    从tracker上获取peer列表[通俗易懂] 从torrent文件中得到了tracker列表后,接下来的工作就是获取peer列表.tracker使用http协议.客户端向服务器发送标准的GET请求,就可以得到这个列表.tracker返回的信息是bencode编码.向tracker发送的GET请求有如下一些参数:info_hash(必须):    torrent文件中info字段的sha1.torrent文件解析器中已经计算此值,保存在CTo

    2026年4月14日
    5
  • C#操作配置文件中appSettings,connectionStrings节点「建议收藏」

    C#操作配置文件中appSettings,connectionStrings节点「建议收藏」usingSystem;usingSystem.Configuration;usingSystem.Web;usingSystem.Web.Configuration;namespacemyConfiguration{   #region配置信息的操作类   ///   ///配置信息的操作   ///   publiccl

    2022年5月21日
    120
  • [ 网络协议篇 ] 一篇文章让你掌握什么是 数字证书 ?什么是SSL ?什么是 TLS ?

    [ 网络协议篇 ] 一篇文章让你掌握什么是 数字证书 ?什么是SSL ?什么是 TLS ?网络协议篇 一篇文章让你掌握什么是数字证书 什么是 SSL 什么是 TLS 非常全面 看完之后你会有意想不到的收获

    2026年3月18日
    2
  • ubuntu卸载Pycharm重新安装永久激活踩坑版

    ubuntu卸载Pycharm重新安装永久激活踩坑版踩坑自我记录篇因为之前安装了 pycharm2020 1 着急用 就使用了 30 天的免费试用 结果今天到期了 想进行激活成功教程的时候 把文件配置搞坏了 之后连界面都打不开 一输入 pycharm sh 就会报错 OpenJDK64 BitServerVMw OptionUseCon 0andwilllike Erroropening

    2026年3月20日
    2
  • 一体化能源行业大数据平台建设,让能源更“聪明”

    一体化能源行业大数据平台建设,让能源更“聪明”现在能源行业,不论是政府政策还是群众呼应,都要求建设智能智慧能源行业,今天我们从为什么,怎么做来为大家讲解如何建设能源行业大数据。能源大数据理念是将电力、石油、燃气等能源领域数据进行综合采集、处理、分析与应用的相关技术与思想。能源大数据不仅是大数据技术在能源领域的深入应用,也是能源生产、消费及相关技术革命与大数据理念的深度融合,将加速推进能源产业发展及商业模式创新。随着信息化的深入和两化的深度融合,大数据在石油石化行业应用的前景将越来越广阔。大数据与能源行业的结合目前主要体现在三个行业。(1)石

    2022年5月18日
    45

发表回复

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

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