Why Is Constructor Call Valid Only As The First Statement In An Instance Constructor
Nov 2, 2009
what's the rationale behind this limitation: Constructor call is valid only as the first statement in an instance constructor i want to pass an argument to my constructor which validates this argument and calls mybase.new according to this argument but it doesn't let me
example:
Public Class prob
Inherits System.ApplicationException
Public Sub New(ByVal problem As String, ByRef inner_exception As Exception)
I'm trying to create an array to be handled during my code. I want to create it as soon as I open the program so I've placed it in my bit of constructor code. This code was working fine before I tried to initialize a new array in there but when I place that in I get the above error message. This occurs whether I put the new array bit of code first in my constructor class or not.
I have an abstract class which requires a delegate to function. I pass the delegate into the constructor. Now that I have a non default constructor I need to call the abstract class's constructors from the concrete class which means that I need to use MyBase.New(...). I have included a quick example below.
Public MustInherit Class BaseClass Public Delegate Sub WorkMethod() Private _Work As WorkMethod
[code]....
I have tried to do this but I keep getting the following error: "Implicit reference to object under construction is not valid when calling another constructor".Can I not do what I am trying to do above? I initially had the delegate setup in its own setter method. But then I am creating a deceptive API because it does require a point to a method to work properly.
I have a defualt constructor that has a object of a Database connectivity class:[code]therefore in theory i have to call the defualt constructor of Question from overloaded constructor. [code]How every in realitty is it possible to call the defautl constructor from the overloaded constructor
I am stuck with a problem about generic classes. I am confused how I call the constructor with parameters. [Code] I get error in the starred area of the DBLayer Object. What might be the possible reason? what can I do to fix it? I even want to add New(byval someval as datatype) in IDBObject interface for overloading construction. but it also gives an error? how can i do it? [Code]
I have a class inside a class.I need to expose the properties of the 2nd class to other classes, therefore it is public.However, I do not wish other classes to be able to create instances of this 2nd class, it should only be instantitated from its parent class.I thought I could resolve this issue by making the constructor of the 2nd class private, but this even prevents the parent class from instantiating its child class! How can I work around this, do I have to make the constructor public and allow anybody to create an instance of the class?
I have recently found out that no argument constructor and multiple argument constructor cannnot call each other in turns. What is the underlying reason of this limitation? Some might say that constructors are where resources are initialised. So they must not be called recursively. I want to know if this is the only reason or not. Functions/methods/procedures can be called recursively.
After debugging a particularly tricky issue in VB.NET involving the order in which instance variables are initialized, I discovered that there is a breaking discrepancy between the behavior that I expected from C# and the actual behavior in VB.NET.Nota bene: This question concerns a slight discrepancy in the behaviors of VB.NET and C#. If you're a language bigot that is unable to provide an answer other than "that's why you should use C#, noob", there is nothing for you to see here; kindly move along.Specifically, I expected the behavior outlined by the C# Language Specification (emphasis added):
When an instance constructor has no constructor initializer, or it has a constructor initializer of the form base(...), that constructor implicitly performs the initializations specified by the variable-initializers of the instance fields declared in its class. This corresponds to a sequence of assignments that are executed immediately upon entry to the constructor and before the implicit invocation of the direct base class constructor. The variable initializers are executed in the textual order in which they appear in the class declaration.
Contrast that with the portion of the VB.NET Language Specification concerning Instance Constructors, which says (emphasis added): When a constructor's first statement is of the form MyBase.New(...), the constructor implicitly performs the initializations specified by the variable initializers of the instance variables declared in the type. This corresponds to a sequence of assignments that are executed immediately after invoking the direct base type constructor. Such ordering ensures that all base instance variables are initialized by their variable initializers before any statements that have access to the instance are executed.
The discrepancy here is immediately obvious. C# initializes class-level variables before calling the base constructor. VB.NET does exactly the reverse, apparently preferring to call the base constructor before setting the values of instance fields.If you want to see some code, this related question provides a more concrete example of the divergent behavior. Unfortunately, it does not provide any hints as to how one might coerce VB.NET into following the model established by C#.
I'm less interested in why the designers of the two languages chose such divergent approaches than I am in possible workarounds for the problem. Ultimately, my question is as follows: Is there any way that I can write or structure my code in VB.NET to force instance variables to be initialized before the base type's constructor is called, as is the standard behavior in C#?
I am having problem with the coding of this (endless loop) and formatting of summary boxes before tests are complete that should not happen. (the overall goals is to have a separate validation procedure that does not calculate or dat displays are not performed until after call function is complete and valid. The validation that takes place are that two boxes are filled in - one is text and the other is a numeric value. (using vb 2008)
A project has a class (CAR Class) with the folloiwng details and the CARADMIN cLASS with the following details: The cardAdmin class has 2 constructor Public Sub New() & Public Sub New(ByVal rec As Rectangle) I dont know how to code the latter constructor..
cAR Class has this method/properties:
Public Class Car Inherits HVSprite Private fSoundFile As String
I am rewriting a C# class in VB. The C# class has a static constructor in it:
static Class() { ... }
which, through the Call Stack, I found is called by the main window's InitializeComponent() method.Everywhere I've looked has told me that the corresponding static constructor in VB is just:Shared Sub New()
but this method is never invoked. Am I creating my VB static constructor right? Is it likely something else that has nothing to do with my static constructor?
A former co-worker wrote a class in C# that was to be used as an attribute. I'm having to convert his work to VB (yeah, it's pointless and way more work than necessary, but management thinks it's a good idea). Unfortunately I'm having an issue because one of the main properties of the class is an ArrayList which is set with a ParamArray in the constructor. The class looks like this (note I've tried to abstract out the problem, so this is a simplified version of the class only)
<AttributeUsage(AttributeTargets.Field Or AttributeTargets.[Property])> _ Public Class LabelAttribute Inherits Attribute Public Sub New()
[CODE]........
In the first one, there is just the single label being added. No Problem. In the second one there are 2 different labels being added. Again, no problem. The third one, however, is a problem because it's assuming that the "Description", which is supposed to be the description is instead being interpreted as another label.
This wasn't a problem in C# because it could be set as follows:
[CODE].................
Of course this doesn't work in VB because optional parameters aren't referred to by name as they are in C#. As a stopgap I've changed the constructor to allow only a single label like this
CODE]..................
But that undermines some of what this class is meant to do. Does anyone know how, or even if I can get the same basic functionality to work in VB?
Think there must be a way to make the existing design work. Imagine this class was built into a library that I could not modify. Would I be forever forbidden from setting Description because of this design?
I need to put following code in the Constructor of my startup form. JohnKenedy.BusinessSQLEXPRInstaller _ins = new JohnKenedy.BusinessSQLEXPRInstaller(" _ <Installation Display Name>", "localhost", "<New database instance name>", _ "<new database name>", "<database password>", "<database backup filename>"); if (_ins.IsDone == false) _ins.ShowDialog(); if (_ins.IsRestart == true) { Application.Exit(); this.Close(); return; } But I really do not know what the Constructor is and how to access it?
I know that you cannot specify a constructor in an interface in .Net, but why can we not?
It would be really useful for my current project to be able to specify that an 'engine' must be passed in with the constructor, but as I cant, I have to suffice with an XML comment on the class.
I'm not sure if this is possible or not. I have a number of different classes that implement interface IBar, and have constructors that take a couple of values. Rather than create a bunch of almost identical method, is it possible to have a generic method that will create the appropriate constructor?
private function GetFoo(Of T)(byval p1, byval p2) as List(Of IBar) dim list as new List(Of IBar) dim foo as T ' a loop here for different values of x foo = new T(x,p1) list.Add(foo) ' end of loop return list end function
I get: 'New' cannot be used on a type parameter that does not have a 'New' constraint.
I trying create Application for the BMP Constructor, I already write the code in C# but I can't translate it into VB.NET, because its require pointer, and as far as i know, there are no pointer function in vb.net @@ so how I can translate this:
FileStream fs = new FileStream(OJSPathBox.Text, FileMode.Open); BinaryReader rdr = new BinaryReader(fs); int width = 555; // its just for example int height = 555; //its just for example
[code]....
ptr declaration is using Pointer and I throught, there are no unsafe in vb.net, how I can translate to vb.net language?
One would think I'd already know this, but I never really gave it much thought before now. When declaring a member variable for a class, is it better to set the default value at the declaration
Private m_strMyVariable As String = "" Or is it better to do it in the constructor Private m_strMyVariable As String
[Code]....
Should I maybe always specify a value at declaration, even if it's Nothing, and just override that value in the constructor(s) as needed? Or is it situation specific? If so, a really quick rundown of which situations might warrant which treatment would be nice.
I am trying to start a new window with a report generated by another aspx.vb member than the form I am in, and leave the current one open. The code below gives me an intellisense message (on the variable newreport):Type System.Windows.Forms.HtmlWindow has no constructors. What do I do?
Dim newreport As New Windows.Forms.HtmlWindow Dim urlString As String = "report_new.aspx"
In the code below I recieve the compile error "Error Too many arguments to 'Public Sub New()'" on the "Dim TestChild As ChildClass = New ChildClass("c")". I do not recieve it on "TestChild.Method1()" even though they are both on the base class I am inheriting from.
Public Class BaseClass Public ReadOnly Text As String Public Sub New(ByVal SetText As String)[code].....
As suggested below but I do not have to do that for Method 1 or other inherited methods and I am looking for the cleanest code possible. This may be a limitation in the system with inheriting parameterized New statements but I can not find it documented anywhere. If it is required then I would like to see the documentation.