|
Ok so let's have an example.
public static class BaseService {
public static void LoadData() {
Console.WriteLine(GetDataSource());
}
protected virtual static string GetDataSource();
}
public static class FileService : BaseService {
protected override static string GetDataSource() { return "file.dat"; }
}
public static class DatabaseService : BaseService {
protected override static string GetDataSource() { return "database"; }
}
... and calling code
void Run() {
DatabaseService.LoadData();
FileService.LoadData();
}
This would print "database" and "file.dat", because the class used for the vtable lookups would be taken from the data type used for the call (i.e. DatabaseService.LoadData). That would be resolved at compile time and based on the static declaration type used in the call, not dynamic object type lookups as with instance dispatch.
A related good idea is the ability to pass service classes around and dispatch off them:
void Run(Class<BaseService> service) {
service.LoadData();
}
... called like Run(DatabaseService) which would bake in the type for dispatch.
|
|
|
|
|
|
harold aptroot wrote: no vptr
Don't get hung up on how current languages are implemented.
I too would like a language that allows static members in interfaces and abstracts. If a Bright compiler developer wanted to make this happen, I'm sure he could, it would likely have to be very different from current implementations. (It's way beyond my skills of course.)
You'll never get very far if all you do is follow instructions.
|
|
|
|
|
|
Oh my, I've been Osmosian-rolled.
You'll never get very far if all you do is follow instructions.
|
|
|
|
|
My anti-virus considered it as a trojan horse.
|
|
|
|
|
I once coded a class function in C++ that calls realloc() or malloc(), based on whether "this" points to null. It then deletes this and returns This.
|
|
|
|
|
|
Not only that, it calls _msize() on the this pointer and checks against another size parameter for the realloc.
The last member in the class was a 0-byte array, for which the _msize() of the pointer minus size of other class members gave the array size.
|
|
|
|
|
BobJanova wrote: static inheritance (i.e. static virtual in C# speak), and that's a really useful concept that is missing in C# Couldn't you use a singleton of some related class hierarchy that implements the "static" code?
We can program with only 1's, but if all you've got are zeros, you've got nothing.
|
|
|
|
|
Well sure, but that's obviously working around a language limitation. If you're making instances of classes that store no state, you should be using static inheritance instead, and the only reason we don't is that it's not supported.
|
|
|
|
|
Delphi allowed virtual static methods... so I think it probably allowed abstract static methods too.
|
|
|
|
|
Never happened to me (YET), however, what has happened and more frequently that what I would like is to spend an entire day trying to fix something to no success but the minute I step outside, I know the answer
|
|
|
|
|
That's actually part of why I spend time here: it breaks my concentration on a problem and lets me think about other things. That means I don't get "fixated" on "this must be why" and my subconscious is free to "bing" me and say "Try this, not that".
Improves my creativity no end, just not concentrating on a problem!
Those who fail to learn history are doomed to repeat it. --- George Santayana (December 16, 1863 – September 26, 1952)
Those who fail to clear history are doomed to explain it. --- OriginalGriff (February 24, 1959 – ∞)
|
|
|
|
|
I agree and I try to do something similiar at times, trying to find a distraction but that would still be related to work, just to "unfocus" while still focused
But not always seen w/ good eyes around here
|
|
|
|
|
I work for myself, so I give myself special permission to "goof off".
Those who fail to learn history are doomed to repeat it. --- George Santayana (December 16, 1863 – September 26, 1952)
Those who fail to clear history are doomed to explain it. --- OriginalGriff (February 24, 1959 – ∞)
|
|
|
|
|
Lucky you! Allowed to give yourself some special permissions
|
|
|
|
|
The down side is the Christmas party is a little lonely...
Those who fail to learn history are doomed to repeat it. --- George Santayana (December 16, 1863 – September 26, 1952)
Those who fail to clear history are doomed to explain it. --- OriginalGriff (February 24, 1959 – ∞)
|
|
|
|
|
Started working here the week after they had their Christmas party so I can't give you any feedback on that one, yet!
|
|
|
|
|
OriginalGriff wrote: That means I don't get "fixated" on "this must be why" and my subconscious is free to "bing" me and say "Try this, not that".
And that's how I defend smoking a pack a day
The console is a black place
|
|
|
|
|
That's what I used to do - take a cigarette break every hour. When I gave up, I realized I wasn't getting as much work done, because I wasn't taking a break!
So rather than take up smoking again (and having seen the price they are charging for them these days, I can think of much, much better things to do with the money) I take a break without the cancer-stick.
Those who fail to learn history are doomed to repeat it. --- George Santayana (December 16, 1863 – September 26, 1952)
Those who fail to clear history are doomed to explain it. --- OriginalGriff (February 24, 1959 – ∞)
|
|
|
|
|
Well, sorry to say this to you, but you don't get paid for work done in your sleep, and theres a good reason for that
|
|
|
|
|
Usually the code I dream about is good but occasionally I waste time on a bomb, depends what I had been drinking the night before?
If first you don't succeed, hide all evidence you ever tried!
|
|
|
|
|
Quote: I waste time on a bomb
Perhaps this is an indication of a flatulence problem in your sleep?
|
|
|
|
|
Kenneth Haugland wrote: Perhaps this is an indication of a flatulence problem in your sleep?
When I can't sleep I don't count sheep I count...
If first you don't succeed, hide all evidence you ever tried!
|
|
|
|