|
Thank you greeg!
|
|
|
|
|
WSonck wrote: I need to do a dynamic cast.
It has been a while since I did any C++, if the following doesn't help can you remind me of the properties of a dynamic_cast.
There are two casting operators in C#
SomeClass castedReference = (SomeClass)objectReference;
SomeClass castedReference = objectReference as SomeClass;
The first will cast an object and raise an exception if the cast fails. You can cast to a the base, or if you have a base reference already you an cast to a more specific derived version.
The second will cast an object and return null if the cast is invalid. Again you can cast to any valid point on the inheritance tree for that object.
There is also the is operator which you can use to tell if an object is some particular type. e.g.
bool isSomeObject = objectReference is SomeClass;
The result will be true if the referenced object is at a valid point on the inheritance hierarchy for given type.
Does this help?
|
|
|
|
|
Of course. This helps me very much. What a great explaination!
Thank you!
|
|
|
|
|
WSonck wrote: In C++ there is dynamic_cast<>, but I don't know how to do this in C#. I expect that you can help me.
Don't use is when your casting because first you must find its type and then make the apropriate cast. The as statement is a much better choice as it does both type checking and casting in one operation. Using the is way forces you to check the types type twice because you must first check the type using is and then cast which also checks the type. The as will return null if it not compatible with that type.
SomeObject sobj = new SomeObject();
ADifferentObject diffObj = sobj as SomeObject();
=====Brain melting code=====
static int Sqrt(int x){ if (x<0) throw new ArgumentOutOfRangeException(); int temp, y=0, b=0x8000, bshft=15, v=x; do { if (v>=(temp=(y<<1)+b<<bshft--)) { y+=b; v-=temp; } } while ((b>>=1)>0); return y; :omg:
====TSI TLFL EEOOLHTG=====
^^^^^^^^^^^^^^^^^
Decode that and you will win.;P
============Hint===========
cout << "33 20 57 4F 52 44 53 62 63 6B 77 6F 72 64 73";
|
|
|
|
|
So, if you don't want to do two checks, what do you do if the reference you are casting may be null in the first place? How do you determine whether the null after the cast was because of an invalid cast, or because the reference was null in the first place?
|
|
|
|
|
Colin Angus Mackay wrote: How do you determine whether the null after the cast was because of an invalid cast, or because the reference was null in the first place?
if ( originalObject == null )
{
... action ...
}
else
{
NewObjectType newObj = originalObject as NewObjectType;
if ( newObj == null )
{
... alternative action ...
}
}
The approach listed above, BTW, is used in some framework code to determine if a specific object is IDisposable before committing to an action.
|
|
|
|
|
But that introduces a second check on the object being cast, which was the main thrust of Henize's argument against using if(x is Y){}
BTW, I agree with your code. It was Henize's argument that was a little odd.
|
|
|
|
|
Colin,
Actually my logic avoids the if (x is y) by doing the cast and then comparing for null. So in the entire logic flow only a single cast occurs. However if there is no loop, I find no problem with also checking if (x is y) then do something. the logic is naturally self documenting -- and that takes precedence over performance (in Agile at least).
Michael
|
|
|
|
|
But you are still doing two checks, one before the cast on whether the object is null, and one after the cast to see if it is null due to an invalid cast - Henize was arguing against doing two checks. (I agree with your code and, like I said, It was an odd argument by Henize)
|
|
|
|
|
Hi All,
I'm a tester in a company (and programmer as well), and I have a small bizzare request ...
I'm checking a windows xp system (with admin. permission) and I have a test case that i'm requested not to move mouse or keyboard for 120 minutes (it's hard coded value that can't be changed) in order to see if the password protected screensaver will show up.
I want to write a small utility (C#) that will make the screensaver show up earlier by changing the time of mouse/keyboard not moved or any other solution (changing the system time with some delay didn't worked for me, I guess the screensaver is counting the seconds key/mouse not moved).
Thanks,
I hope someone have an idea.
|
|
|
|
|
Liron,
If I were you I would just wait 120 minutes and go for one or more beers
Gael
|
|
|
|
|
hehehehehe ... I wish ...
Just want ot be a little bit more effective :->
|
|
|
|
|
Liron Hirsch wrote: Just want ot be a little bit more effective
I would rather the program itself be more effective, like being able to change the idle time to something more reasonable. Why leave a computer open for 2 hours? Just how did the developers expect you to test this bit of functionality?
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
you are right, but, this is the application for now and i need to handle the problem.
|
|
|
|
|
|
this is an obscure request. If you're lucky you might get something in a day or two. Expecting someone to have it right away is rather naive.
Assuming this is possible at all, I'm dubious, it would almost certainly have to be done via a win32 api call. The proper place to ask for them is the c++ forum.
|
|
|
|
|
dan neely wrote: it would almost certainly have to be done via a win32 api call.
What about bending the space time continuum?
led mike
|
|
|
|
|
That's a hardware implementation not software.
|
|
|
|
|
Agreed, but managers don't know the difference. :->
led mike
|
|
|
|
|
Wow...if something was important enough to protect with a password, leaving it open for 2 hours seems a little naive to me.
I'd just suggest setting up a separate computer (laptop per say) to do that portion of the test while you're working on the other test procedures.
|
|
|
|
|
Or use VMWare / VirtualPC and just leave it minimised
|
|
|
|
|
Whether or not this will work depends upon the method used for keeping track of time in the screensaver app. If it tracks the passage of time internally, then you're screwed.
How to: Get or Set the System Time[^]
[DllImport("kernel32.dll")]
private extern static void GetSystemTime(ref SYSTEMTIME lpSystemTime);
[DllImport("kernel32.dll")]
private extern static uint SetSystemTime(ref SYSTEMTIME lpSystemTime);
private struct SYSTEMTIME
{
public ushort wYear;
public ushort wMonth;
public ushort wDayOfWeek;
public ushort wDay;
public ushort wHour;
public ushort wMinute;
public ushort wSecond;
public ushort wMilliseconds;
}
private void SetTime()
{
SYSTEMTIME systime = new SYSTEMTIME();
GetSystemTime(ref systime);
systime.wHour = (ushort)(systime.wHour + 2 % 24);
SetSystemTime(ref systime);
}
--EricDV Sig---------
Some problems are so complex that you have to be highly intelligent and well informed just to be undecided about them.
- Laurence J. Peters
|
|
|
|
|
Can we create the object of a class programatically. I want to create the object of a form. It's name is strored in the database. At run time how can i create
the object of that form?
Awaiting for a replay
Regards,
Hari
|
|
|
|
|
hi
i don't see any problem here, try this
if(MyCondition == true)
{
myClass temp = new myClass;
}
hople it will help you...
Tamimi - Code
|
|
|
|
|
Thanks for your replay. Actully i want to create the object of a from, whose name is stored as a string in the databse.It is unknown to me while writing the code. so i can't use 'myClass temp = new myClass;' as you mentioned. Let me have your idea regarding this
Regards
Hari
|
|
|
|