How To Know If Class Has Been Extended With Extension Methods
May 30, 2012In VB.NET or C#, is there a way to determine if a class has been extended with extension methods?
View 3 RepliesIn VB.NET or C#, is there a way to determine if a class has been extended with extension methods?
View 3 RepliesI've seen extended .NET method libraries such as this and this.In VB.NET, since you create your extended methods in a Module, How do I make them into a DLL?? (like in those links above) Its not possible to build and get the DLL from a Module.
View 7 RepliesI created a couple of extended methods in a VB.NET module. I put them inside a Class, built it and got the DLL. From another program I made a reference to that DLL and imported it using Imports as well.The extended methods appear in IntelliSense and it works but a warning appears in the Error console saying,Could not resolve this reference. Could not locate the assembly "nK0deExtendedMethods". Check to make sure the assembly exists on disk. why this error occurs even though I have referenced the DLL?
This is the Class where I've put my module with the extended method.
Imports System.Runtime.CompilerServices
Imports System.Drawing
Namespace nK0deExtendedMethods
[code]....
And I'm having another doubt. In the Imports statement, I have to mention the DLL's name along with the Namespace name. Like this,
Imports ExtendedMethods.nK0deExtendedMethods
Normally you only have to import the Namespace's name, right?
I'm trying to use PGK.Extensions in a T4 template in VS2008 for VB.NET and I get:
RemoveAllSpecialCharacters is not a member of string..
My T4 headers:
<#@ template language="VB" hostspecific="false" debug="true" inherits="Microsoft.VisualStudio.TextTemplating.VSHost.ModelingTextTransformation" #>
<#@ output extension="vb" #>
<#@ assembly name="PGK.Extensions.dll" #> // the dll is found
<#@ import namespace="StringExtensions" #> //Try with and without namespace
[Code]...
I would like to know your opinion on extension methods. Sure, it is a nice feature and makes you feel powerful. It's great to see your own method pop up when typing in a object. But it doesn't really add something new... You can get the job done with normal methods as well. I think extension methods do not belong in object oriented programming. It makes your code easier to read but harder to understand for someone else.
View 2 RepliesCODE:
View 2 RepliesI'm trying to write 2 extension methods to handle Enum types.One to use the description attribute to give some better explanation to the enum options and a second method to list the enum options and their description to use in a selectlist or some kind of collection.You can read my code up to now here:
<Extension()> _
Public Function ToDescriptionString(ByVal en As System.Enum) As String
Dim type As Type = en.GetType
Dim entries() As String = en.ToString().Split(","c)
[code]....
So my problem is both extension methods don't work that well together. The methods that converts the enum options to an ienumerable can't use the extension method to get the description.
I wonder why it's impossible to create and extension method for Object? I use Excel PIA. The property Cells of Worksheet returns Object (if using with indexes). For example, Worksheet.Cells(1, 1) returns Object type. I know it's a Range object, and I want to cast it to Range. It would be convenient to write following:[code]
View 5 RepliesI know what extension methods are, how to create and use them, but I wanted to know more about how they actually work. How do they "attach" themselves to the type of object that you are extending? Or is there even an attachment being made. I know want to know more about the inner workings, etc.. I looked around and read several different blog posts about extensions and not one of them discusses how they actually work.
View 6 RepliesIf I try to call my extension method which is defined like this:
Module LinqExtensions
<System.Runtime.CompilerServices.Extension()> _
Public Function ToSortableBindingList(Of TSource)(ByVal source As IEnumerable(Of TSource))
[code].....
Code in VB.NET
[Code]...
works very well. So seems some consistency miss of the string constant behavior.
2) Have a look on the COMMENTS (in the attached picture). The words "custom", "string" and "error" are highlighted, however they are in the comments, so should be green, not blue.
Why this? What workaround? EDIT: Declared as "bug" in Microsoft Connect (even if is not more that a syntactic "miss")... EDIT 2: As remarked Hans Passant, standard string methods, like "cucu".Trim() does not work either.
Consider the following:
Public Module Extensions
<Extension()> _
Public Sub Initialize(ByRef Target as SomeClass, ByVal SomeParam as Something )
[code].....
Why is Case 1 failing to initialize the object as expected?
Is there anyway to add an overload "extension method" to a method that already has one or more extension methods?For example theString.Contains method has two extension methods totalling 3 separate versions.Is there anyway to add an extra extension method also called "Contains" ?By the way I have tried it but the IDE does not seem to recognise additional EXTENSION methods where a method already hasone or more extension methods.Is there anyway around this restriction?In other words I would like to be able to change the Extension method below from"Contain" to "Contains" but it seems it is not recognised.
Option Strict On
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
[code].....
I am not sure how clear my question is by the title, but I am trying to make Class methods instead of Instance methods in Visual Basic that way I don't have to waste memory and code creating temporary objects to execute methods that don't need instance variables.
I am not sure if you can do that in VB but I know you can in Objective-C by using either a "+" or "-" sign in front of the method declaration. And in C++ (at least I think, I can't remember) you put the static keyword or const keyword in front of the function.How would I do this in VB if it is possible? Or should I just make a separate set of functions that are not members of a class?
I made a library in C# and I've been told by people that one of mine methods don't work in VB.NET as extension [UR]
this is the method:
public static PropertyDescriptorCollection GetProps(this object o)
{
return GetProps(o.GetType());
}
I wrote some string extension methods in a VB assembly and am unit testing them from a C# project. However, C# acts like it cannot see the the extension methods, when other VB projects reference the VB assembly they have no problem. Both the VB assemebly and the C# test project are targeting .Net 3.5. Is there a way around this?
[Code]...
I have many similar calls to database and they work fine
Using ta As New QT_SSTEntities
Return ta.Product.
Select(Function(c) New RadComboBoxData() With {.Text = c.FieldName1, .Value = c.FieldName1}).
[Code].....
I'm using extension methods based on an array and I would like to know if there is an easy way to check that array got a specify size instead of me doing a copy paste of
if array.count != 1000
throw new exception "size of the array does not match"
in about ~50 extensions
this a small sample of extensions that I use, I got WAY more
<Extension()>
Public Function IsWhite(ByVal board() As bitPiece, ByVal pos As Integer) As Boolean
Return (board(pos) And bitPiece.White) = bitPiece.White
End Function
[code]....
Is it really impossible to create an extension method in C# where the instance is passed as a reference?
Heres a sample VB.NET console app:
Imports System.Runtime.CompilerServices
Module Module1
[code].....
I have the code as below:
Dim xdTest As XDocument = XDocument.Load(GetXMLPath())
Dim objResult = From xe In xdTest.Elements("Some Element") _
Where xe.Element("strName").Value = strInput _
Select xe.Element("intValue").Value
objResult.
I cannot access any extension methods for objResult, like .ToList() or .First(). The file imports System.Linq and the project is targeted to .NET 3.5. How do I get the extension methods back?
I have a project written in MVC2 and VB.NET. I use a lot of htmlhelper extension methods,and I have them all in a public module. They work just fine, and I can compile and run my project. I reference the namespace they are in with this:<%@ Import Namespace="MyProject.WebUI.Extensions" %>So, again, they work great, my project runs and compiles without a hitch.The problem is that each one of these extension methods is shown as an error:
Error 33 'TabbedMenu' is not a member of 'System.Web.Mvc.HtmlHelper(Of Object)'. C:ProjectsMyProjectMyProject.WebUIViewsSharedSite.Master 23 21 MyProject.WebUI
[code]....
I have a number of very useful extension methods that I'd like to use in my Silverlight project.I've pasted the Module here [URL]The problem I'm having is that visual studio complains that the dlls my module have been written against have not been built against the Silverlight runtime.Is there an easy way to get these extension methods working in Silverlight?I'm thinking my main hurdle is getting IObjectSet and ObjectContext to run against the Silverlight run-time - perhaps there's another way to expose these methods that I'm not aware of.
View 1 RepliesI am building a code behind page that has a public property (MyDTOItem) which is essentially a DTO object (dtDTOItem) Note: In my code the Get and Set are actually real code (I stripped it for the example).The problem I am having is in the Page_Load event. When I set the .Member1 property of the DTO object the Get code runs and not the Set and therefore the DTO ibject property .Member1 never gets assigned. I figured out that if I add code (MyDTOItem = New dtDTOItem) to the Page_Load event then it will set the value correctly. What I am trying to figure out is how to initialize the property object without having to do it explicitly. It has to be an extended property because I have custom Get and Set code.
Public Property MyDTOItem As dtDTOItem
Get
End Get
Set(value As dtDTOItem)
[code]....
I am building a code behind page that has a public property (MyDTOItem) which is essentially a DTO object (dtDTOItem) Note: In my code the Get and Set are actually real code (I stripped it for the example).
The problem I am having is in the Page_Load event. When I set the .Member1 property of the DTO object the Get code runs and not the Set and therefore the DTO ibject property .Member1 never gets assigned.
I figured out that if I add code (MyDTOItem = New dtDTOItem) to the Page_Load event then it will set the value correctly. What I am trying to figure out is how to initialize the property object without having to do it explicitly. It has to be an extended property because I have custom Get and Set code.
Public Property MyDTOItem As dtDTOItem
Get
End Get
[code]....
I have extended an Entity Framework 4 entity class with a calculated property in a partial class. This member is not available on the client to which the entities are exposed via WCF RIA Services.when using C# appears to be changing the extension of the partial class file from .cs to .shared.cs. I tried this with my VB.Net solution (.vb to .shared.vb) and got a long list of errors. I believe what happened is that the partial class lost its association with the entity on the client - it inherited from object rather than EntityObject.
My best guess is that this is related to the way that VB.Net handles namespaces.Each project has a 'Root Namespace' which is prepended to anything that is defined within a code file. C# has a 'Default Namespace'which is the namespace into which new types are placed by default - via a namespace statement within the file.The partial class is probably having the client namespace prepended to it which puts it into a different namespace than the entity with which it is associated on the server.Is there any means of extending an entity in such a way that those extensions are available on the client via WCF RIA Services and VB.Net?
Is this possible to use <Attributes> on a method in a Class extension ?Here is a Class A
Public Class Goblin
Inherits Monster
Enum goblinsRole
[code].....
my question is simple. How do i add methods to the standard DataGridView control of VB.NET
I want to add some methods of my own to the class, but i tried inheritance and i get errors. What are the techniques out there to extend native classes in vb net
Example ^. I must be forgetting something or being really dumb.
View 3 RepliesIn this project I am making a grade calculator; I am modifying an existing code I have to have the following characteristics: I need to modify the DetermineGrade method so that it accepts the maximum number of points that can be earned on both tests (currently, the max number of points is 200: 100 points per test). For an A grade, the student must earn at least 90% of the total number of points. For a B, the student must earn at least 80%. For a C, at least 70%. For a D, at least 60%. If they earn less than 60% of the total points, then grade is F. Here is the exisint code I have for the DetermineGrade method specifically:
Public Sub DetermineGrade()
Dim intTotal As Integer
intTotal = _intScore1 + _intScore2
[code]......
I am trying to add shared members in derived classes and use that values in base classes...
I have base
class DBLayer
public shared function GetDetail(byval UIN as integer)
dim StrSql = string.format("select * from {0} where uin = {1}", tablename, uin)
end function
end class
[Code]..
currently there is error using the tablename variable of derived class in base class but i want to use it i dun know other techniques if other solutions are better then u can post it or u can say how can i make it work? confused...