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


相关推荐

  • cocos2d0基础篇笔记一

    cocos2d0基础篇笔记一

    2021年11月13日
    42
  • 经典java视频教程,个人无私分享「建议收藏」

    经典java视频教程,个人无私分享「建议收藏」好东西,大家共享,希望能给大家带来方便,能这样就很满足了张孝祥java视频教程[全][初级篇]http://www.so138.com/sov/C2DFB84A-614D-4C45-B773-41EC703AF1AB.html孙鑫java技术从入门到精通视频教程http://www.so138.com/sov/6B51C757-E3AA-4791-8E9D-0F880DC38AE1.htm

    2022年5月16日
    49
  • Vue生成二维码_生成二维码插件

    Vue生成二维码_生成二维码插件首先安装一下面这个插件cnpminstallvue-qr-S接下来在需要生产并下载二维码的页面引入importVueQrfrom’vue-qr’并在components中注册为组件components:{VueQr//二维码组件},data(){ return{ config:{//二维码配置logo:”,value:”} }

    2022年9月25日
    4
  • gis中char是什么字段_输入一个字符串统计字母个数

    gis中char是什么字段_输入一个字符串统计字母个数维护一个字符串集合,支持两种操作:I x 向集合中插入一个字符串 x;Q x 询问一个字符串在集合中出现了多少次。共有 N 个操作,输入的字符串总长度不超过 105,字符串仅包含小写英文字母。输入格式第一行包含整数 N,表示操作数。接下来 N 行,每行包含一个操作指令,指令为 I x 或 Q x 中的一种。输出格式对于每个询问指令 Q x,都要输出一个整数作为结果,表示 x 在集合中出现的次数。每个结果占一行。数据范围1≤N≤2∗104输入样例:5I abcQ abcQ ab

    2022年8月9日
    10
  • C++之constexpr详解

    C++之constexpr详解constexpr表达式是指值不会改变并且在编译过程就能得到计算结果的表达式。声明为constexpr的变量一定是一个const变量,而且必须用常量表达式初始化:constexprintmf=20;//20是常量表达式constexprintlimit=mf+1;//mf+1是常量表达式constexprintsz=size();//之后当siz…

    2025年8月6日
    2
  • 仿ios版微信应用源代码[通俗易懂]

    仿ios版微信应用源代码

    2022年1月23日
    137

发表回复

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

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