|
Thanks,
but i don't use SQL Server 2005, but i read the Article about MARS on MSDN, this is not exactly that, what i want, because i want the possibility to have more parallel running transactions.
But many thanks to you all for your answers, but i have now the solution (or at least the ideas for my solution)
|
|
|
|
|
Suppose I have a generic class A with a method Xyz.
public class A<t> : where T : class
{
// lots of stuff omitted...
public int Xyz()
{ // details omitted
}
}
Elsewhere I have an object reference. I want to test if the reference refers to an instance of A (don't care about what <t> is), and if it is an instance of A, invoke method Xyz and get the return value. Something like
if (ref is A)
{
int returnValue = ((A)ref).Xyz();
}
except that this code doesn't work when A is a generic type. Can this be done?
Thanks
Peter
|
|
|
|
|
the problem you have is that A does not exist, but A<T> does. So you cant cast to A .
However, seeing as method Xyz() does not rely on Generic type T at all, I would structure your code to include non-generic type A and then inherit for the generic stuff:
public class A
{
public int Xyz()
{
}
}
public class A<T> : A where T : class
{
}
now, this will work:
if (ref is A)
{
int returnValue = ((A)ref).Xyz();
}
|
|
|
|
|
Yes, however IMO that would fail if Xyz() depends on T.
Luc Pattyn [Forum Guidelines] [My Articles]
The quality and detail of your question reflects on the effectiveness of the help you are likely to get.
Show formatted code inside PRE tags, and give clear symptoms when describing a problem.
|
|
|
|
|
True, but the information provided did not appear to indicate that Xyz relied on T. I can only answe on info provided
|
|
|
|
|
Hi,
this generates "1":
public class A<T> where T : class {
public int Xyz() { return 1; }
}
public class CPTest_Generic : CPTest {
public override void Test(int arg) {
test2(new A<Form>());
}
public int test2(object rf) {
A<Form> aa=rf as A<Form>;
int result=0;
if (aa!=null) result=aa.Xyz();
log("result="+result);
return result;
}
}
Luc Pattyn [Forum Guidelines] [My Articles]
The quality and detail of your question reflects on the effectiveness of the help you are likely to get.
Show formatted code inside PRE tags, and give clear symptoms when describing a problem.
|
|
|
|
|
You could write an interface that specifies Xyz, have A<T> implement it, then test for the interface rather than A.
|
|
|
|
|
Yes, this:
public interface Abase {
int Xyz();
}
public class A<T> : Abase where T : class {
public int Xyz() { return 1; }
}
public class CPTest_Generic : CPTest {
public override void Test(int arg) {
test2(new A<Form>());
}
public int test2(object rf) {
Abase aa=rf as Abase;
int result=0;
if (aa!=null) result=aa.Xyz();
log("result="+result);
return result;
}
}
works however it forces Xyz() to be T-agnostic, so what is generic about it?
Luc Pattyn [Forum Guidelines] [My Articles]
The quality and detail of your question reflects on the effectiveness of the help you are likely to get.
Show formatted code inside PRE tags, and give clear symptoms when describing a problem.
|
|
|
|
|
Make the interface generic?
public interface Abase<T>
{
T Xyz() ;
}
(Not tested.)
modified on Monday, August 10, 2009 6:57 PM
|
|
|
|
|
I agree with PIEBALDconsult, an interface is probably the cleanest way to do this:
public class A<T> : IA where T : class
{
public int Xyz()
{
return 1;
}
}
public interface IA
{
int Xyz();
}
if (a is IA)
int returnValue = (a as IA).Xyz();
DaveBTW, in software, hope and pray is not a viable strategy. (Luc Pattyn) Visual Basic is not used by normal people so we're not covering it here. (Uncyclopedia) Why are you using VB6? Do you hate yourself? (Christian Graus)
|
|
|
|
|
Why use is and as ? Pick one.
|
|
|
|
|
Force of habit. Say a was passed as a parameter (object o) . Without the is , you would have to catch the NullReferenceException at the as if it wasn't an A<T> instance, and without the as (or some other cast/conversion), there would be no way to access the Xyz method.
DaveBTW, in software, hope and pray is not a viable strategy. (Luc Pattyn) Visual Basic is not used by normal people so we're not covering it here. (Uncyclopedia) Why are you using VB6? Do you hate yourself? (Christian Graus)
|
|
|
|
|
A<T> a = o as A<T> ;
if ( a != null ) a.Xyz() ;
or
if ( a is A<T> ) ((A<T>) o).Xyz() ;
Aw crap, how'd it get to be 01:00? I'd better get to bed.
|
|
|
|
|
Hello All ,
I was readinf the lock concept and find that there is problem with lock(this) or lock(public type).
what is the problem doing like that ?
Please explain me with an example
|
|
|
|
|
A good starting point for research is the documentation[^]. I think you would be surprised at the information available in MSDN.
|
|
|
|
|
Nah. MSDN documentation is like holiday brochures without pictures, nothing interesting there.
Luc Pattyn [Forum Guidelines] [My Articles]
The quality and detail of your question reflects on the effectiveness of the help you are likely to get.
Show formatted code inside PRE tags, and give clear symptoms when describing a problem.
|
|
|
|
|
Actually, the particular article I referenced while sparse does indicate the common problems and a common solution in the remarks section. Although, most MSDN is total crap.
|
|
|
|
|
I check the documentation . I did not get that what was the problem .
any way we are making lock on that object . So what matters if that is private or public?
Please help me out
|
|
|
|
|
you could as well ask why private and protected members exist at all. Why not make everything public?
it is a matter of encapsulation, separation of concern, improving reliability, etc.
Luc Pattyn [Forum Guidelines] [My Articles]
The quality and detail of your question reflects on the effectiveness of the help you are likely to get.
Show formatted code inside PRE tags, and give clear symptoms when describing a problem.
|
|
|
|
|
No That i not mean at all . what i got confused is anyhow i am locking that object . So untill i done with my work no body can tamper it with .
So even if i declare private or public i am holding a lock on that . So how that acces specifier will affect that .
Sorry to trouble u .. bUt a good example will clear my doubt .. my brain is not able to leav this doubt unanswered.
|
|
|
|
|
when your locker object is public I can lock it without your code being aware of it; so all your code would break right away. Don't make public what doesn't have to be public, that is one of the OO principles.
Luc Pattyn [Forum Guidelines] [My Articles]
The quality and detail of your question reflects on the effectiveness of the help you are likely to get.
Show formatted code inside PRE tags, and give clear symptoms when describing a problem.
|
|
|
|
|
Yet with Reflection I can see your privates.
|
|
|
|
|
You'd better think twice before applying reflection on me...
Luc Pattyn [Forum Guidelines] [My Articles]
The quality and detail of your question reflects on the effectiveness of the help you are likely to get.
Show formatted code inside PRE tags, and give clear symptoms when describing a problem.
|
|
|
|
|
The problem with Lock(this) and Lock(type) is that these objects are public, so an external code could lock on them. So if your class is named YourClass, I can make a code like this:
YourClass obj = new YourClass();
lock(obj){ ... }
And that would probably deadlock your internal code. Same problem for a public type. Since it is commom to lock an object that you want to protect, it's not too dificult for a code like this to happen.
The best approach is to create an object just for locking on it, instead of locking the class object. Make this locking object "static" and you get the same effect of locking a type.
Regards,
Leonardo Muzzi
|
|
|
|
|
Hi All,
I am having problems adding a new row to a datagridview control in my form. I have a simple form
with datagridview. When the user types in an item number in the first columen by event
the system will populate the datagridview with the relevant data from the database.
|
|
|
|