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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • centos7系统更新命令_centos 更新

    centos7系统更新命令_centos 更新1.查看网络IP ifconfig2.下载命令 wget+网址3.安装 yum-y install + 目标4.删除文件 sudo rm 文件所在目录/目标强制删除文件 rm -f删除目录 rm -rf5.复制一个文件到另一个文件夹sudo cp /文件夹/文件 /另一个文件夹6.对一些文件进行读写sudo vim 文件名7….

    2022年8月18日
    10
  • 绕过“请在微信客户端打开链接”如微师下载视频等。

    绕过“请在微信客户端打开链接”如微师下载视频等。UA(UserAgent)的问题。微信内置的浏览器设置了特定的UA,在网页加载时会识别这个UA修改UA:浏览器不同地方不同360浏览器:F2点击右上角”更多工具”-“网络状态”找到下面的用户代理(UserAgent),取消选择Selectautomatically(自动选择),然后在输入框中加入“MicroMessenger”就可以了。goole:我用的是Chrome,其他浏览器也大同小异。在你打开需要的网页链接之前F12打开开发者…

    2022年5月18日
    78
  • Pytest(11)allure报告「建议收藏」

    Pytest(11)allure报告「建议收藏」前言allure是一个report框架,支持java的Junit/testng等框架,当然也可以支持python的pytest框架,也可以集成到Jenkins上展示高大上的报告界面。mac环境:

    2022年7月29日
    10
  • eagle-eye介绍

    eagle-eye介绍简介淘宝现在是一个由很多个应用集群组成的非常复杂的分布式系统。这些应用里面主要有处理用户请求的前端系统和有提供服务的后端系统等。这些应用之间一般有RPC调用和异步消息通讯两种手段,RPC调用会产生一层调一层的嵌套,一个消息发布出来更会被多个应用消费,另外,应用还会访问分库分表的数据库、缓存、存储等后端,以及调用其他外部系统如支付、物流、机彩票等。请试想一下,现在淘宝一个买家点击下单按…

    2022年8月16日
    9
  • Oracle 修改表名、修改列名「建议收藏」

    Oracle 修改表名、修改列名「建议收藏」–重命名表ALTERTABLEtable_nameRENAMETOnew_table_name;–重命名列ALTERTABLEtable_nameRENAMECOLUMNcolumn_nameTOnew_name; 

    2022年5月16日
    40
  • MySQL 上亿大表优化实践

    MySQL 上亿大表优化实践

    2022年2月13日
    44

发表回复

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

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