|
see here in C# we have Equal method to check this.
bool Object.Equal(object obj) >>signature
this will determine that System.object is equal to the specified System.Object.And if both objects are same it will return true otherwise false.
your eg :
Object1.Equal(Object2);
this is one of easyest method.
Another method is Implementing IComparable interface. And this interface have only one abstract method called CampareTo(). you have to over ride this method in the type whose implementing this Icomparable interface.
you will get nice explanation and example for this in MSDN.
Please feel free to contact.
Sreejith S S Nair - Bangalore
|
|
|
|
|
insead of object2 in Object1.Equals(Object2) can't I put a class..
_____________________________________________________
Believe! Every thing has a purpose
|
|
|
|
|
No, only objects (unless you're comparing to Type s). As Corinna and I both said, use if (obj is SomeType) or if (obj.GetType() == typeof(SomeType)) , depending on whether or not SomeType can be a value type.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Actually, the static Object.Equals determines if two reference variables refer to the same object. For value types, this depends upon their values.
The default virtual instance method, Object.Equals , also performs the same as above except that derivative types (and everything derives from Object ) can override Equals and provide their own implementation, but a type doesn't have to override it.
You're right about IComparable , though. If an object implements this interface, it should be used instead. This can be done easily by using the Comparer in the .NET FCL. This will check for an IComparable implementation, otherwise it will revert to a virtual call to Object.Equals .
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Thanx Mr. Stewart but I have to compare an object to see wether it is an instance of a class..
I have replied to the above post please see.
_____________________________________________________
Believe! Every thing has a purpose
|
|
|
|
|
And that's EXACTLY what Corinna and I told you how to do.
object obj = "This is a string variable.";
if (obj is string)
Console.WriteLine(obj.ToString());
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
I don't want to compare a string!
I want to compare a class..
ok as said above it worked without an interface but
See the above post ...
PLEASE..
I know you can help.
_____________________________________________________
Believe! Every thing has a purpose
|
|
|
|
|
You don't get it - that was an example.
If you want to see if an object is an instance of class, then you use the is keyword. This is conceptually the same as doing:
if (obj.GetType().Equals(typeof(SomeClass)))
{
} ...but is much shorter and compiles to few instructions. Try reading the documentation for the is keyword in your VS.NET documentation.
In the sample, obj is an instance of something, and you replace SomeClass with the class name. My sample using the string did just that.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
ok fine.. the code worked.. thanx..
but another problem.. this doesn't work if I have that function defined in a class implementing an interface, & instead of somclass I put the interface name? It doesn't work..
to my understanding, an instance of the class implementing the interface should be
if (obj.GetType().Equals(typeof(SomeInterface)))<br />
... true
right?
_____________________________________________________
Believe! Every thing has a purpose
|
|
|
|
|
Use is , not obj.GetType.Equals when you want to determine if an object is a type of something. So instead of using instanceOf in Java, you use is in C#. The statement I gave similar to above is only similar in concept. This results in many more instructions than the two to three instructions required to use is . What's so hard about understanding this?
if (obj is SomeClass)
{
} I mean, it's practically the same as using instanceOf in Java!
If you want to determine if an object implements an interface, you must get the Type by calling GetType on the object, then search for the interfaces. A class can never be an instance of an interface, since an interface is abstract and cannot be instantiated, so is or Type.Equals cannot be used.
Type t = obj.GetType();
if (t.GetInterface("ISomeInterface"))
{
} There's a couple other ways of doing this as well, such as calling Type.GetInterfaces and enumerating the Type array, which is actually better because then you compare actual types instead of strings, since a class could implement two interfaces named "ISomeInterface" but that are different types (different namespaces and/or different assemblies).
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Wo! thats too much to think it might take a while...
_____________________________________________________
Believe! Every thing has a purpose
|
|
|
|
|
I am trying the second part you told me, but its not happening..
_____________________________________________________
Believe! Every thing has a purpose
|
|
|
|
|
Hi all,
I have developed a application which retreive html from different sites in order to save the content in my HD.
Problems appers using the event DWebBrowserEvents2_DocumentCompleteEvent because sometimes the pages are formed by variuos subpages in remote sites and must be loaded, so the application receives a lot of DWebBrowserEvents2_DocumentCompleteEvent events and it is impossible to know when is really finish.
Does anybody know a solution for this ?
Thanks a lot !!!
|
|
|
|
|
If you only want to know when the first page is loaded (the frameset), the use a simple state variable and handle the BeforeNavigate2 event. Set the state variable in the handler for that event. In your DocumentComplete event, check the state of the variable. If it's set, do what you need and reset the variable. If the variable isn't set, ignore further requests.
If you're saving content, however, wouldn't you want to be notified with each documented that is loaded when it finishes? If you just save the first document, all you get is the frameset (or any other document hosting other concent that fires this event). Without the "embedded" content, such a top-level document is useless (a framset without the frame content isn't much now, is it? ).
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
In my case the application must wait for a compete load operation before call a click() method in order to navigate to the next page, so that's why it must know when all the frames/subpages have been loaded, a solution could be create a counter variable, but the number of subpages/frames to load in each page (document) is variable.
Any idea ?
|
|
|
|
|
DWebBrowserEvents2::DocumentComplete fires only after all lower-level frames have been loaded (in the case of a frameset). So using a state variable is still the way to go, but you'll actually want to store the URL being requested initially and compare that with the URL passed through the event arguments. If they are the same, your frameset is loaded.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Hi gurus,
it's me again.
My question is simple.
How can I create a thread in C#?
I would like to call DirectPlay functions in a thread.
The thread would manage all connections: Hosting/Connecting/enumerating/disconnecting sessions etc.
Because when I use the Peer's methods like Host, Connect etc. the interface do not answer anymore. The application look frozen.
I could do this in MFC but C# is different...
Thanks for the help.
best regards.
There is no spoon.
|
|
|
|
|
bouli wrote:
How can I create a thread in C#?
A thread in C# needs a delegate for a void method without any parameters:
<br />
Thread thread = new Thread(new ThreadStart(doSomething));<br />
thread.Start();<br />
In this example doSomething runs in the new thread. If the thread needs parameters, you have to use instance variables.
|
|
|
|
|
Hi,
I'd like to monitor the sites a user visits, so i'd like to log all the url's visited by a particular user!
Would it be possible to copy the url as soon as the user hits enter after typing in the url or am i going to have to copy the url from the browser cache or history!
Can some please help me out with the source code to do this , no matter what way you choose to do it!
Thanx 4 the help ..!
|
|
|
|
|
This is best done by using a Browser Helper Object (BHO). An old article on MSDN describing BHOs uses just the example you're looking for, except that instead of logging the URL it displays the content of the page when the document is done download. Read Browser Helper Objects: The Browser the Way You Want It[^]. If you need further help on this, please visit the VC++ forum here on CodeProject.
You can write a BHO using C#, but you need to declare a lot of interop'd interfaces and perform a lot of marshaling. Sorry to say, based on how you phrased your question you may have more problems with this. Besides, when you're hooking a majority of the events on DWebBrowserEvents2 , you need to be quick. Managed code can be faster than native code, but when a lot of marshaling is involved, you'll find that performance is quite a bit slower.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
Hi gurus,
How can I create my own event and fire it in C#?
example code:
this following is taken from DirectX SDK DirectPlay tutorii
this event is fired by the Peer.FindHosts method
<br />
public void FindHostResponseHandler(object sender, FindHostResponseEventArgs args)<br />
{<br />
HostInfo Node = new HostInfo();<br />
Node.GuidInstance = args.Message.ApplicationDescription.GuidInstance;<br />
Node.HostAddress = (Address) args.Message.AddressSender.Clone();<br />
Node.SessionName = args.Message.ApplicationDescription.SessionName;<br />
<br />
if (!FoundSessions.Contains(Node))<br />
{<br />
FoundSessions.Add(Node);<br />
}<br />
}<br />
Thanks for the help.
best regards.
There is no spoon.
|
|
|
|
|
The correct way is to define a delegate that extends EventHandler , or use an existing one (depending on whether or not a particular delegate declares a param with an EventArgs -derivative that suits your needs).
Raising Events[^] in the .NET Framework SDK explains the recommended way of firing events, which includes declaring a delegate and EventArgs derivative (like I said, if necessary), declaring the event on your class, and making a protected virtual member named OnEventName that actually fires the event (so that derivative classes can either override it to handle events without a delegate (faster, with more control) or raise the event themselves).
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
You've been faster again! This is the second time today that I write an answer to a new question, and when it is posted your answer is already there.
BTW: It's not necessary to derive from EventArgs . FxCop wants me to do so, but where is the real benefit?
|
|
|
|
|
It's just common for events. You're right, though, it's not necessary. Commonality, though, fosters better programming for those (few these days, it seems) that recognize the pattern.
Microsoft MVP, Visual C#
My Articles
|
|
|
|
|
ok, I've got it... thanks
I start to understand the way it works.
it's even more simple than MFC... :P
There is no spoon.
|
|
|
|