Make Constructor Public And Allow Anybody To Create An Instance Of Class?
Apr 6, 2009
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?
Is there any way to make a class instance public?In my mainform I define an instance of a certain class and then later on in some other forms which appear I want to alter this class.I try and pass them through when creating new instances of these other forms and it tells me Error3<instance of the class I want> cannot expose type <the class> outside the project through class <the form I want to edit it with>Which I gather from documentation is about it defeating the purpose to have a private class suddenly be thrown aroudn.but then how do I make it public? I can't define it in the first place as public myXClass as XClass, it only accepts private.
I want to created a nested class that can only be visible to and instantiated from the parent class.But I also want to be able to use an instance of the nested class through a public variable of the parent class.I tried making the nested class private, or making the nested class' constructor private, but it won't compile.Is it possible to do this in .NET?
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 working through a book that does not provide a lot of example code and what it does provide is in C#. The book refs vs 2005 but I'm using vs2008. The author asks for the user to create a solution with two projects, one winforms and the other a class library (called DependentAssm). The class library is added as a reference to the winforms project In the class library, he asks one to create a new class called SayHelloComp. The project created a file called class1.vb, and a class called class1 which I renamed to SayHelloComp. I left the file name alone, that's ok right?
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 want to create a class that will "search" for something. Basically I load up the "search item" when the class is created and inside the class is logic to do the "search". The result of this logic will be more "searches" that I want to start. How can I have the logic in the class create another instance of the class itself?
I am working on an ASP.Net 3.5 solution that I did not originally build. I added a class file named Incident.vb to the App_Code folder like I always do.But in my code behind of a web page, I usually create an instance of a class like:
Dim oIncident as New Incident
But after I type "New", normally I would see my class file he intellisense but I do not. So it does not seem to be able to find Incident.vb. I have not seen this behavior before. Trust me, my class is correct. I have created many class files like this.[code]...
I have a class "Character" that holds character stats and skills. I make a new instance of it "MyCharacter". The problem is I would like to use it like this. MyCharacter.stat.charactername ="whatever" Where stat is another class within Character or MyCharacter.skill.lockpick=10, b But I can't seem to do it.
i am working on the MSDN tutorials through virtual labs and am encountering a problem with the very first tutorial regarding consoles. I am required to create two notepad files: Module HelloWorld & Public Class Person which I have done without errors having triple checked them. When the files are created I compile the HelloWorld.vb file and a .exe is created
I follow the rest of the steps and encounter an error when i try to compile the Person.vb file using the line vbc Person.vb/t:library/out:HelloWorldLib.dll as i am getting the following errors:
vbc : Command line error BC2001 : file 'HelloWorld.vb/t:library/out:HelloWorldLib.dll' could not be found vbc : Command line error BC2008 : no input sources specified
Do I have to instantiate description every time for different method? Or should I use static? Here's how I'm doing this now: What is the best way of handling this kind of situations. it seems that I repeat this line:Dim description As BLLDescription = New BLLDescription() without any good reasn.
Protected Sub Button8_Click(sender As Object, e As System.EventArgs) Handles Button8.Click Dim description As BLLDescription = New BLLDescription()
I understand if i was to create my own class i would need to declare a variable with the new keyword to create an object to access the encapsulated methods properties etc, unless they were declared shared.
dim myVar as myClass = new myClass
But in this next example is where i have become confused. i have added the mschart control to the form and used the hittest function with the following code.
Dim myVar as hittestresult myvar = me.chart1.hittest(e.x,e.y)
Why wasn't it necessary to create a new instance of the class 1st. Does the hittest function return an object or a reference pointer to the object. To clarify what's the protocol for when & when not to create a new instance of the class in use.
I have an application that reads another processes memory.I initially had multiple scanning threads for the various areas I needed to read.This was processor intensive so I decided to go with the observer pattern.All was well except that I am having a weird behavior.Here is what is happening.I have 2 radars (overlay and mapped)Both have a watcher class that attaches to the memory scanner and is notified on a new list of mobs.so I open radar 1 (mapped) it attaches it's watcher to the scanner and waits for mob list update notifications
Open radar 2 (overlay). same thing happens and another watcher is attached.all is well and good so far.Now there are properies on the mobs in the list, one of which is IsFilteredOut.This property is set in the radar code after it receives the list. Now the weird behavior is that no matter what I do, the second radar to be opened changes all the properties of the mobs in the list of both radars.It is as if I am passing the list by ref, but I am not.I actually create a new instance of the moblist class every time I pass the list.Here is the notify code. As you can see I create a new instance of the moblist class each pass.
Private Sub NotifyMobListUpdated(ByVal Mobs As List(Of MobData)) If Mobs IsNot Nothing Then For Each w As Watcher In _watchers[code].....
Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim example1 As New ExampleClass[code]......
I am trying to create new variables inside a class after creating its object at runtime. The problem is that I don't know the variable names or the value beforehand so I have to create the new variables at runtime.
[Code]...
This is a more elaborate explanation of my code. If you observe that in the Eval function I have tried to evaluate Fval(abc). Now the object array abc is not declared in the Test class because it existence is not known beforehand. What I want to do is create an object array abc of length 2 and populate it with some values and when Fval(abc) is called then then the value of index 1 should be the return value of Eval fucntion.
I'm creating what I believe is an mdi app.I have a login form.I have a class for security.My login form creates an instance of the security class. There are all kinds of security parameters for each user (permissions to different things, etc.)These parameters are part of my security class.Once the user logs in, many other forms will all be opened and closed within the main mdi frame.All of these other forms need the information of the security class to know what the user has permission to do.Do I have to create a new instance of security class for every form in my project? Isn't there a way to store this stuff globally somehow. Retrieve once from the db at the start of the app during login and just get it from this global area everytime?
I have this class Framework.Asd.Human with a public empty constructor. and i want to be able to dynamically create an instance of it from a string input "Framework.Asd.Human". Is this achievable? (in java and C#)
I have a base class, "B", which has two constructors, one with no paremeters and the other that accepts one param, an integer. I have a subclass, "S", which inherits from "B" and does not define any constructors in it. I create an instance of S, attempting to pass to the constructor an integer.
I get the error: Error 1 Too many arguments to 'Public Sub New()"
This surprises me because I thought that if a constructor is not defined in the subclass, S, that the base class constructor method, specifically, the one with the single integer param would be invoked w/o an error. why I am getting this error? Are constructors a special case?
I do not want a Windows Media Player control on my form. I am making an alarm clock. I have tried this: Friend WithEvents WindowsMediaPlayer As New Microsoft.Win32. But I do not see a Windows Media Player member. I also asked on the MSDN VB Forum.
I have created a class (pasted below in case I did something wrong) for which I want to create an instance that is usable across forms/modules. I can create an instance of the class in a single form/module no problem via DIM User as New User but how do I go about create a public instance accessible from all parts of my program?
I have some classes, BsfciFile and StudyFlashCard. Bsfci is the extension to which I save my set of flashcards in an INI format. I am currently working to transform my code from using Windows API calls to access the INI to using a IniFile class that I found on the internet. I would like the BsfciFile to have a Array of StudyFlashCard objects, but I would like the StudyFlashCard class to use the IniFile class object contained in the BsfciFile class. I can pass the IniFile from the BsfciFile class to the constructor for the StudyFlashCard class, but I want it to modify the same IniFile as the BsfciFile class has later on.
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.
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#?