473,507 Members | 11,372 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

Cast generic IFoo<T> : last level (I hope)

Hello again,

My last question which opened a big debate about casting such a generic
interface learned me a lot, but I can't find a way because of my particular
generic interface.
I will shown you my code, but when you will answer my post, don't write:
- he is stupid (I already know)
- this is not Object Oriented
- generic is not made for that ...

abstract class BaseStaticOverride<Twhere T : BaseStaticOverride<T>
{

private static T _instance;

private static object _lock = new object();

public static T Instance
{

get
{

if (_instance == null)
{

lock (_lock)
{

if (_instance == null)

_instance =
(T)Activator.CreateInstance(typeof(T), true);

}

}

return _instance;

}

}
}

abstract class C1Base<T: BaseStaticOverride<Twhere T : C1Base<T>
{

protected C1Base()
{

}

public void WriteLine()
{

Console.WriteLine(Line);

}
protected abstract string Line
{

get;

}
}
class C1 : C1Base<C1>
{

protected C1()
{

}

protected override string Line
{

get { return "C1"; }

}

}

C1 can be considered as a static method with my code and so C1 and
C1Base<C1are the same class.
The problem occures when I don't know which class implement C1Base
(C1Base<?>). Since C1Base<?can be considered as static, I think it would be
possible to do this:
C1Base<?>.Instance.WriteLine(); // which will return "C1"

Hope you understand what I want to do.

Thanks in advance for your help.
Jul 25 '08 #1
4 1176
On Jul 25, 1:29*pm, Alphapage <Alphap...@discussions.microsoft.com>
wrote:

<snip>
Hope you understand what I want to do.
Not really, I'm afraid. You're referring to C1 as a static *method*
but it's a *class*.

On a somewhat different note, your use of double-checked locking isn't
threadsafe. If you make _instance volatile it would be safe, but
generally I'd just use a static initializer instead. See
http://pobox.com/~skeet/csharp/singleton.html

Jon
Jul 25 '08 #2
Your reference to Java only served to confuse me further :-)

What (in .NET) is wrong with his double-lock approach?

Jul 25 '08 #3
On Jul 25, 1:50*pm, "Peter Morris" <mrpmorri...@SPAMgmail.comwrote:
Your reference to Java only served to confuse me further :-)

What (in .NET) is wrong with his double-lock approach?
Without the "volatile" flag there's still the possibility that a
client will see a non-null reference before all of the writes have
been flushed, I believe. In other words, it could see a half-
constructed object.

Lock-free programming is always tricky, and almost never a good idea
for mere mortals like ourselves. I'll leave it to Joe Duffy, who knows
what he's talking about. (Even he's worried at the moment, as one
memory model isn't quite what he thought it was...)

Using a static initializer is simpler, safer, and still lazy (if you
include the static constructor).

Jon
Jul 25 '08 #4
On Fri, 25 Jul 2008 05:29:01 -0700, Alphapage
<Al*******@discussions.microsoft.comwrote:
Hello again,

My last question which opened a big debate about casting such a generic
interface learned me a lot, but I can't find a way because of my
particular
generic interface.
I will shown you my code, but when you will answer my post, don't write:
- he is stupid (I already know)
- this is not Object Oriented
- generic is not made for that ...
Okay, I won't. :) Especially the first...I try very hard to never write
things like that even when I know them to be true, and there's nothing
here to suggest it is.

On the other two points, I guess it just remains to be seen. As Jon says,
I don't think this code example clears things up much, if at all. In
addition to his comment, I'll point out that I've never seen correct code
where the type parameter is constrained to inherit the type in which it's
being used.

It's possible that there's some esoteric use of generics that I'm
unfamiliar with where it comes up, but the few times I've played around
with that construct myself, I've gotten nowhere and coded myself into
logical impossibilities. If you're sure that that's the right tack to
take, you need to at least elaborate on _why_ you're declaring your
generic classes that way.

Pete
Jul 25 '08 #5

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

0
1064
by: Jack Addington | last post by:
I have a tree view object that I am trying to load via database calls. I'm trying to make it generic so that I can extend and re-use it. One of the things I want to be able to do is to load the...
2
2018
by: Jasper Kent | last post by:
I'm trying to do the equivalent of using typedefs with templates in C++ to avoid long instantiation names. I can do this okay: using BigDictionary = System.Collections.Generic.Dictionary<int,...
2
4677
by: Dave Thorens | last post by:
Hi. My VB6 application has several collections of custom classes, and each class has differing properties (ie. the classes are not necessarily related). I want to write a generic function which can...
4
5308
by: Sameh Ahmed | last post by:
Hello there Is there a way to get the last control that was in focus before the current control? please note that I don't want the next or previous control in the tab order, I need the last one...
3
2635
by: David Veeneman | last post by:
I'm writing a custom Find() function on a collection class derived from List<T>. The function will return an object of the type held in the collection. How do I specify the return type of the...
5
3729
by: Nathan Sokalski | last post by:
I have a control that I want displayed in all items except the last one. I figured the best way to do this was to determine whether the current item was the last from within the ItemDataBound event...
7
38599
by: Andrus | last post by:
public class BusinessObjectGeneric<EntityType: BusinessObject where EntityType : BusinessEntity, new() { public BusinessObjectGeneric<EntityType() { } ..... causes error in constructor...
6
2910
by: Andrus | last post by:
I need to create generic table field level cache. Table primary key (PrimaryKeyStructType) can be int, string or struct containing int and string fields. FieldName contains table field name to be...
15
2355
by: Lloyd Dupont | last post by:
Don't mistake generic type for what you would like them to be!! IFoo<Ahas nothing in common with IFoo<B>! They are completely different type create dynamically at runtime. What you ask is a...
0
7221
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
7109
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
0
7313
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...
0
7372
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
0
5619
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing,...
1
5039
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new...
0
3190
by: TSSRALBI | last post by:
Hello I'm a network technician in training and I need your help. I am currently learning how to create and manage the different types of VPNs and I have a question about LAN-to-LAN VPNs. The...
0
1537
by: 6302768590 | last post by:
Hai team i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated ...
1
758
muto222
by: muto222 | last post by:
How can i add a mobile payment intergratation into php mysql website.

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.