C# - .NET Generic Class Instance - Passing A Variable Data Type
Jun 2, 2010
I'm tyring to pass a variable data type to a template class. Something like this:
frmExample = New LookupForm(Of Models.MyClass) 'Works fine
Dim SelectedType As Type = InstanceOfMyClass.GetType() 'Works fine
frmExample = New LookupForm(Of SelectedType) 'Ba-bow!
frmExample = New LookupForm(Of InstanceOfMyClass.GetType()) 'Ba-bow!
[Code].....
I'm assuming it's something to do with the template being processed at compile time but even if I'm off the mark there, it wouldn't solve my problem anyway. I can't find any relevant information on using Reflection to instance template classes either.
(How) can I create an instance of a dynamically typed repository at runtime?
D is a dictionary whose entry values are of Type T..What I'm attempting to do is have a delegate like "Serializer" below that I can invoke on an instance of T, such as "Entry.Value" below.Please see the "return Entry..." line below for my wishful thinking.[code]
I am trying to write a generic method, to avoid code duplication, which will create or activate a Form as an MDI children, based on its type. But I have to lines in error (see comments).
I'm compiling a VB.Net 2.0 app (created in VS2008) using msbuild, and now I've added a generic return type, it's giving me the following:
Warning: Type library exporter encountered a generic type instance in a signature. Generic code may not be exported to COM.
Having just spent ages removing all of the previous warnings, I don't really want to add a new one. Any idea how to get rid of it (aside from not using generics)?I don't know what details I'd put in the attribute, or what number to put in the project-level ignore list.
Public MustInherit Class Column Public ReadOnly Property ReturnSomethingUseful() As Object Get 'return something useful
[code]....
But this gives the following error:
Public Overrides Function ParseValue(sValue As String) As Boolean' cannot override 'Public Overridable Function ParseValue(sValue As String) As Object' because they differ by their return types.
I accept that you can't do this, but I'd like to be able to preserve the semantics of what I'm. trying to do, which is to have an untyped version that deals with Object, but a typed version in derived classes that knows about the specific type T.
The red code does not works. How do I get the type of data to declare, for example, a Specific Instance(Of integer) if Data is integer, and also Specific (of SomeClass) if Data is SomeClass?
I have a class C(Of T). I want to determine if some given value has type C, regardless of what T is. For example, I might want to determine if a value is a strongly-typed list, regardless what type of items the list stores. I just need to know how to do it in VB.net. In Java the syntax is like this: var result = obj instance of Gen2<?>;
1) VB Allows non-type template parameters2) VB supports explicit specialization 3) VB allows the type parameters to be used as the base class for the generic type4) VB allows a generic type parameter itself to to be a generic 5) VB enforces that all codes are valid for all types of parametrs
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?
I have the following sample code in a VB.NET console application. It compiles and works, but feels like a hack. Is there a way to define EmptyChild so that it inherits from Intermediate(Of T As Class) without using the dummy EmptyClass?
Module Module1 Sub Main() Dim Child1 = New RealChild()[code].....
The other way to do this would be to move the generic code out of the Base class and then create 2 Intermediate classes like this [code]...
Then RealChild would inherit from the generic Intermediate and EmptyChild would inherit from the non-generic Intermediate. My problem with that solution is that the Base class is in a separate assembly and I need to keep the code that handles the generic type in that assembly. And there is functionality in the Intermediate class that does not belong in the assembly with the Base class.
I'm a newbie to VB, and I am having difficulty understanding what the following (legacy code) class declaration actually means: Public MustInherit Class ModelBase(Of T As {ModelBase(Of T, TIdType), New}, TIdType)
There is also a related ModelBaseCollection: Public MustInherit Class ModelBaseCollection(Of TCollection As {ModelBaseCollection(Of TCollection, TModel, TIdType), New}, TModel As {ModelBase(Of TModel, TIdType), New}, TIdType) Inherits Collection(Of TModel)
I have difficulty understanding the need for the ModelBaseCollection class as the ModelBase class is a generic type.
I have a bunch of classes that all contain a Shared ReadOnly Dictionary. If I want to access that Dictionary when the class is a generic type (such as when I have a wrapper function that takes T as an interface that all of these classes implement), what's the way to do it?
I want to do something like GetType(T).GetMember("Dict"), but that will return a MemberInfo type, and that cannot be cast to a Dictionary of my defined type(s). For calling functions this way, one can use a delegate + CreateDelegate + GetMethod. But there doesn't seem to be an equivalent Create*for GetMember stuff. Or am I missing something?
If I plug the GetMember call into the immediate window, and then use a subscript as if it is an array, then the debug output says I am getting a Dictionary back. But if I use that same approach in the actual function that I am trying to write, then I get an error about System.Reflection.MemberInfo cannot be converted to Dictionary(X, Y)
Suppose I want to write a generic function that will return the fully qualified name of the data type. In other words, how would you implement the following: Public Shared Function Foo(Of T)() As String ' Return the fully qualified name of T End Function
I am trying to work with classes and variables and don't seem to understand some behavior that is going on.
first off the class Public Class csSession Public ID As Integer Public Name As String End Class Usage and behavior (example code) Dim S1 as new csSession Dim S2 as new csSession S1.ID = 1 S1.Name = "1st Session" S2 = S1 S2.ID = 99
When I assign S2 = S1 all the values of S1 passes to S2 but also there is a "link" or bond between the two variables now. If I change the values of S2 this automatically changes the values of S1!! Why does this happen and how can I prevent it? I just want to pass the variables values contained S1 to S2.
Dim myObject As Something There I defined my variable myObject of type Something. But, as you can see, I am giving it no value yet. Sometime on runtime I want to check if myObject is holding a value or not. I tried this: If myObject <> Nothing Then But apparently I can't do such comparison.
I need a static variable to get a ListItemCollection from a List control (I can do this, but if I don't set it as Shared It's not preserving the values as it should). The thing is that this class is a SharePoint webpart, so I most probably will be using the webpart more than once, and I need this variable to be unique to each webpart, which shared doesn't accomplish.I tried everything you can imagine. I placed a Static variable within a Sub (shared and not shared), I tried it with Properties (also Shared and not shared)...
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.
If ediFileGroupAbbr = "NIPDSINV" OrElse ediFileGroupAbbr = "WWPDSINV" Then Dim p As New PrivateBillingAdapter_ForN(ediFileGroupAbbr, businessLocationID, mode, EDIJobItemLogID, BusinessUnitID) Return p.ProcessEDI(True, False) ElseIf ediFileGroupAbbr = "FOPDSINV" Then
[code]...
to which I'm passing in a value of ediFileGroupAbbr = "FOPDSINV". But the code is executing as if it's dropping into the third condition (p is a PrivateBillingAdapter). So I've stepped into the code and, sure enough, it drops into the second condition. BUT, if I step into the execution of the constructor, the debugger jumps to an odd place in the code - sort of the middle of a method and not on any actual line of code.A couple clicks and it hops back out of the constructor, still in the second block of code. But if I mouse over the variable p to see it's type, boom, its a PrivateBillingAdapter (from the third block).Like I said, something is clearly wrong but I don't know what. I've tried rebuilding several times but with no new results.This is VS2003, framework 1.1 with VB.NET.
I'm strictly looking for a language conversion here of this:List<?> I already have a work around I'm just surprised that I can't find the vb.net equivalent of a variable type of a "raw" generic list that takes a wild card.Java's mechanism here enables you to reference a list regardless of what T is.Java even enables you to go further and do things like:
List<? extends Number> List<? super Double>I tried: List(Of )
and that did not work. That only seems to work inside the GetType function.
Doing a small project where I would like to be able to print the results of certain calculations. I want to open a new form where the data can be neatly presented and printed. I just can't seem to make the data get passed along to the new form when I open it..
Public Class notifierMain Public Class Contacts Inherits List(Of row) Public Sub New()
[code]....
When I debug this winforms application I get curType = "notifier.notifierMain+Contacts+row" I want to the Validate function to know it is in MyContacts. How do I do this?
i have 2 mustinherit classes where one is a generic one:
'Visual Basic 2008 - .net 3.5 - Any CPU Public MustInherit Class BaseObject
End Class
Public MustInherit Class BaseObjectList(Of T As {New, BaseObject}) Inherits List(Of T) End Class[code]...........
i receive: "Type argument BaseObject is declared 'MustInherit' and does not satisfy the 'New' constraint for the type parameter"users would never enter data in the wrong form,files they choose to open would always exist and code would never have bugs.
I have been asked by a code snippet to add the instance of class that contains data i want to add to an XML file, the only trouble is i am not sure what an instance of class is. Is it something that looks like this: [Code]