Solved

TYPEs - GetType, typeof(), etc

Posted on 2007-04-11
3
798 Views
Last Modified: 2012-08-14
Please explain to me about Types and the methodss GetType(something), typeof(something) and myobject.GetType()

They seems to all do subtley different things and I'm never sure how to use them.

For example, when serializing I need a type to create a new serializer:
dim foo as new XmlSerialzier(System.Data.DataView)

But what if I have an object reference and I want to pull its type out.... how do I do that?  The various combinatuion of the above crash:
dim foo as new XmlSerialzier(   GetType(MyObject) )  ' does not compile - "Type MyObject not defined"
dim foo as new XmlSerialzier(   MyObject.GetType() )  ' compiles but crashes  
dim foo as new XmlSerialzier(  typeof( MyObject) )  ' does not compile - " 'Is' expected"

Please explain these different methods to me and tell me how to pull out and use the type of an object reference.


Thanks



0
Comment
Question by:jasww
  • 2
3 Comments
 
LVL 3

Expert Comment

by:JipFromParis
ID: 18889591
You write : dim foo as new XmlSerialzier(   GetType(MyObject) )  ' does not compile - "Type MyObject not defined"
You shoudl write : dim foo as new XmlSerializer(Type.GetType(MyObject) ) ' GetType with one parameter is a static method of the System.Type class and thus should be prefixed by the class name.

you write : dim foo as new XmlSerialzier(   MyObject.GetType() )  ' compiles but crashes  
OK : How does it crash ? Any stack trace and exception message ?

You write : dim foo as new XmlSerialzier(  typeof( MyObject) )  ' does not compile - " 'Is' expected"
You should write something else because typeof Visual Basic operator is completely different from the same operator in C# or C/C++. The VB syntax is :
result = TypeOf objectexpression Is typename
where result is a boolean value which is the result of evaluating 'objectexpression', then getting the real type of the result and comparing it with the type which name is given by 'typename' in order to assert if both types are compatible.

Pulling out the type of an object instance is as easy as writing : myInstance.GetType()
0
 

Author Comment

by:jasww
ID: 18889647
The reason that
 dim foo as new XmlSerialzier(   MyObject.GetType() )  ' compiles but crashes  
crashes is because of a problem with the class I'm trying to serialise.  The Data.DataView class seems to dislike being serilaised and crashes with:

"You must implement the Add(System.Data.DataRowView) method on System.Data.DataView because it inherits from ICollection."
I got it working by serialising the parent dataset instead.

So my misunderstanding was not as great as I first thought.


However, the question still remains - kindly explain Type.GetType(sometype)  or GetType(sometype)   versus myobject.GetType(), and how these equate to C#'s typeof()


Thanks
0
 
LVL 3

Accepted Solution

by:
JipFromParis earned 125 total points
ID: 18889769
You've got several options all of which are returning you an instance of the System.Type class describing a class, a structure, an enumeration, a delegate ... :

1a°) Get the type description of a type by type name. Use Type.GetType(typeName) where you provide the type name for example :
Type.GetType("System.Object") ' Notice the argument which is a string.
1b°) Do it in C# and use the typeof operator such as : typeof(System.Object)  ' Notice we provide the type name directly. The typeof operator is resolved by the compiler. This implies you must provide a valid type name at compilation. On the other hand the Type.GetType() method will let you compute its string argument at runtime which might be helpfull in certain circumstances.

2°) Get the type description of an object. User theObject.GetType() ' where theObject is the instance you want to retrieve the type description.
0

Featured Post

Master Your Team's Linux and Cloud Stack

Come see why top tech companies like Mailchimp and Media Temple use Linux Academy to build their employee training programs.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Hey Audio! 3 29
in Dot net,lastest version of MVC 3 24
VB.NET - Error - Object not set in Module 4 33
Help with adding DLL file in Windows project 20 30
A long time ago (May 2011), I have written an article showing you how to create a DLL using Visual Studio 2005 to be hosted in SQL Server 2005. That was valid at that time and it is still valid if you are still using these versions. You can still re…
Entity Framework is a powerful tool to help you interact with the DataBase but still doesn't help much when we have a Stored Procedure that returns more than one resultset. The solution takes some of out-of-the-box thinking; read on!
This tutorial gives a high-level tour of the interface of Marketo (a marketing automation tool to help businesses track and engage prospective customers and drive them to purchase). You will see the main areas including Marketing Activities, Design …
Microsoft Active Directory, the widely used IT infrastructure, is known for its high risk of credential theft. The best way to test your Active Directory’s vulnerabilities to pass-the-ticket, pass-the-hash, privilege escalation, and malware attacks …

770 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question