|
This is a VB.NET specific question and one that is quite easy to test on your own. All you 'd have to do is put
Debug.WriteLine("Int32 version")
before the Return statement in the Int32 version.
The default data type for both arguments in your Check call would be Int32. The compiler never assumes that a integer would be an Int16. From there, it's easy to figure out that the Int32 version of your method would get called. The Int16 version would never be called unless you passed in two arguments that were specifically defined as Int16's.
|
|
|
|
|
Thanks Dave. This is not actually a VB.NET specific question.
I mean because I have taken an example with VB.net syntax it doesn't make this problem VB specific.
Anyways, thank you for your reply it is really helpful for me.
Rohan
|
|
|
|
|
Thannks for the detailed description.
I think, I mae a mistake using vb.net code syntax what if i would have put C# syntax to make my point clear?
Rohan
|
|
|
|
|
Either way, the language you choose is going to dictate which forum the question should go in. Even though both C# and VB.NET both target the .NET CLR, there are differences between the languages. For instance, VB.NET supports optional parameters in methods, where C# doesn't. C# supports pointers, where VB.NET does not.
|
|
|
|
|
It would depend on what the compiler (VB.NET or C#) decided to classify 1 or 2 as. As Dave pointed out it just so happens that both decide to call it Int32 but one could potentially decided to place 1 and 2 in bytes for they cared.
|
|
|
|
|
Hi,
See my code below.
Public Class OOPS
Public Function Check(ByVal a As Int32, ByVal b As Int32) As Int16
Return a + b
End Function
Public Function Check(ByVal a As Int16, ByVal b As Int16) As Int16
Return a - b
End Function
End Class
Dim obj As New OOPS
Dim retVal As Int16
retVal = obj.Check(1, 2)
Which function will be called the first one or the second one and why.
Thanks in advance for your help
Rohan
Rohan
|
|
|
|
|
hi ,
After reading a few articles , i made this printEngine class that
derives from PrintDocument. The print engine takes any class that
exposes the IPrintableDocument interface. This interface defines a
method that supplies a PrintablePage to the exposing class which
should fill the page with classes that expose IPrintableSection. Its
not very complicated but it does have a few flaws. Like although it
_can_ handle pagination , it does'nt do it very well.
Could someone please check the code and tell me if the design is ok?
And if it needs any improvements?
I should mention that i'm a self taught newbie!
Heres the code:
http://gidsfiles.googlepages.com/PrintingCore.cs[^]
http://gidsfiles.googlepages.com/_PrintableSections.cs[^]
http://gidsfiles.googlepages.com/PrintTest.cs[^]
This is how the print engine is used with the printTest class:
PrintEngine pDoc = new PrintEngine();<br />
pDoc.PrintableDocument = new PrintTest();<br />
PrintDialog prt = new PrintDialog();<br />
prt.Document = pDoc;<br />
prt.ShowDialog();<br />
PrintPreviewDialog prev = new PrintPreviewDialog();<br />
prev.Document = pDoc;<br />
prev.ShowDialog();
Thanks so much
Gideon
|
|
|
|
|
Looks okay.
"Real programmers just throw a bunch of 1s and 0s at the computer to see what sticks" - Pete O'Hanlon
|
|
|
|
|
On more than one occasion, and again now, I face the problem of needing to aggregate logged exception data. Often the message includes one or more instance specific values, such as an account number etc. My problem is I must log the account number, or line item number, or whatever, but I also need top be able to, e.g. pull a report on how many invoices exports failed because the account was on hold.
I'm looking for a way to factor the instance specific information out of the message, making the message more of an event description, which is consistent for every occurrence of a certain exception, and additional data available for closer inspection. Using some sort of Event Type, with 'user' defined fields per event seems like a good concept for me, but what are my other options?
|
|
|
|
|
Hi all,
Have a question here. I am trying to build a software in C#, and is in the process of partitioning the work for different developers. The software will be made up of different components which will have some interdependency (ie one component will have to make use of methods from another component).
How can I proceed so that these components can be developed in parallel? Given that I have already clearly defined the interfaces to these components.
|
|
|
|
|
If the only dependencies are the interfaces and they've been cast in stone finalized, you should be able to start parallel development. I think.
Cheers,
Vıkram.
After all is said and done, much is said and little is done.
|
|
|
|
|
Say you have a class with a virtual method (using C#):
public class BaseClass
{
public virtual void DoSomething()
{
}
}
A class that derives from the base class:
public class DerivedClass : BaseClass
{
public override void DoSomething()
{
base.DoSomething();
}
}
Questions:
What is your opinion of the derived class calling the base class's implementation of DoSomething ?
Suppose the base class is designed in such a way that any derived class must call the base class method/property when overriding it in order for the class's invariants to be maintained. Is this bad design?
|
|
|
|
|
|
I don't agree that it’s necessarily bad design. It’s perfectly reasonable for a derived class to add functionality rather than replace it.
Steve
|
|
|
|
|
|
The Grand Negus wrote: Perfectly reasonable presuming that one has accepted the notion that derived classes of any sort are reasonable.
Derived classes are perfectly reasonable just like it’s reasonable to use the term “vehicle” to refer to all manner of vehicles (cars, trucks, bikes, etc) or to class, say, a car as a vehicle. In the same way that much can be said about vehicles in general, a lot of the common aspects in a simulation of vehicles can be factored into a base class; the specifics of a particular vehicle are factored into derived classes.
Steve
|
|
|
|
|
The Grand Negus wrote: the question is whether or not operations upon things should be defined within those things (as if those things were capable of independent and autonomous action).
Operation on at thing usually causes a reaction that depends on the very nature of the thing itself. This is OOP point of view and, at least, an useful abstraction.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
|
|
|
|
|
The Grand Negus wrote: Perfectly reasonable presuming that one has accepted the notion that derived classes of any sort are reasonable.
No. the above is NOT a pre-requisite.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
|
|
|
|
|
Stephen Hewitt wrote: I don't agree that it’s necessarily bad design. It’s perfectly reasonable for a derived class to add functionality rather than replace it.
I guess what bothers me is the ambiguity involved. As a matter of practice should an overriden method call the base class method? If so, should it call it at the beginning of the overriden method or at the end? Should we rely on documentation to specify if calling the base class method is necessary?
|
|
|
|
|
That's where, in a perfect world, documentation would come into the picture. It might be valid to do things both before and after. One pattern you may be interesting in is the following:
NOTE: This is in C++. I'm no C# expert so I'm not sure how much of this will cleanly translate.
class CMyClass
{
public:
bool DoSomething()
{
int size = DoSomething_GetSize();
std::string str = DoSomething_GetString();
}
private:
virtual int DoSomething_GetSize()
{
return 1;
}
virtual std::string DoSomething_GetString()
{
return std::string("Hello");
}
};
In this pattern all the methods that users call are implemented by non-virtual public functions. Any customization needed is implemented by virtual function “hooks” that customize specific aspects of the public functions. In this pattern you don’t call the base class version (you can't as they're private) and customization is limited to specific preplanned areas.
Steve
|
|
|
|
|
What's inelegant about public and private members (no to mention protected )? Data hiding is a fundamental concept in computer programming and public , private and protected are just C++’s (and some other language's) expression of this concept. “Hooks” is my terminology; there is nothing inelegant: if you want a particular aspect of a function to be customised by a derived class you factor it into a virtual function which can then be overridden. This pattern is used in C++'s iostream library. “Crap” you say? If I wanted to find crap I’d visit here[^].
Steve
|
|
|
|
|
|
I don't want to get into a pointless flame war, but still I can't resist one last comment on the following:
The Grand Negus wrote: Technobabble. I think you guys like this stuff to be obscure.
It seems to me you like to "buck the system", so to speak. You're frequently rubbishing existing best practice. Most fields have their own jargon: the people involved generally consider this a simplifying factor rather than the opposite.
Steve
|
|
|
|
|
The Grand Negus wrote: Is "anterior" better than "front"? Is "podiatrist" clearer than "foot doctor"? Is "bi-directional communication link" an improvement over "two-way radio"?
Must you apply layman's terms to everything in everyones chosen career fields?? For the layman, yes, one is better than the other. For the people working in those chosen fields, no, they're not. The layman's terms are more ambiguous.
Just because you think everything is wrong with the world doesn't make it so for the rest of us.
The Grand Negus wrote: My 2006 Chevy has almost twice as many parts as my 1964 Cadillac but is not significantly better in any way.
I'm willing to bet, even with more complexity and parts, statistically, it's more reliable and safer. So, depending on your definition of "better", yes and no, it is "significantly better in any way".
|
|
|
|
|
For you maybe, but most of this is subjective. And you are finding that many of us actually enjoy it.
So, why insist on pissing on our parade? Oh right, you're not talking with us really you're attempting to reach the silent ones. Sorry, I forgot you have you're own agenda.
How does it help someone who is seeking help with his CURRENT design issue with a language that he HAS to use at his JOB by telling him OOP is POOP and English is the way!??? How does that help this person, who's thread you are hijacking with PE pushing?
This statement was never false.
|
|
|
|