472,961 Members | 1,745 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 472,961 software developers and data experts.

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 1159
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
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
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
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
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
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
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
by: Andrus | last post by:
public class BusinessObjectGeneric<EntityType: BusinessObject where EntityType : BusinessEntity, new() { public BusinessObjectGeneric<EntityType() { } ..... causes error in constructor...
6
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
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
by: Aliciasmith | last post by:
In an age dominated by smartphones, having a mobile app for your business is no longer an option; it's a necessity. Whether you're a startup or an established enterprise, finding the right mobile app...
0
tracyyun
by: tracyyun | last post by:
Hello everyone, I have a question and would like some advice on network connectivity. I have one computer connected to my router via WiFi, but I have two other computers that I want to be able to...
2
by: giovanniandrean | last post by:
The energy model is structured as follows and uses excel sheets to give input data: 1-Utility.py contains all the functions needed to calculate the variables and other minor things (mentions...
4
NeoPa
by: NeoPa | last post by:
Hello everyone. I find myself stuck trying to find the VBA way to get Access to create a PDF of the currently-selected (and open) object (Form or Report). I know it can be done by selecting :...
3
NeoPa
by: NeoPa | last post by:
Introduction For this article I'll be using a very simple database which has Form (clsForm) & Report (clsReport) classes that simply handle making the calling Form invisible until the Form, or all...
1
by: Teri B | last post by:
Hi, I have created a sub-form Roles. In my course form the user selects the roles assigned to the course. 0ne-to-many. One course many roles. Then I created a report based on the Course form and...
3
by: nia12 | last post by:
Hi there, I am very new to Access so apologies if any of this is obvious/not clear. I am creating a data collection tool for health care employees to complete. It consists of a number of...
0
NeoPa
by: NeoPa | last post by:
Introduction For this article I'll be focusing on the Report (clsReport) class. This simply handles making the calling Form invisible until all of the Reports opened by it have been closed, when it...
2
by: GKJR | last post by:
Does anyone have a recommendation to build a standalone application to replace an Access database? I have my bookkeeping software I developed in Access that I would like to make available to other...

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.