|
You can't. You have to wait till C# 3.0 is released to do that. C# 3.0 has a new language feature called "Extension methods" that allow you to do what you want.
Regards
Senthil
_____________________________
My Blog | My Articles | WinMacro
|
|
|
|
|
Dear Senthil,
How about using Class Array as a base clase?
Nuray
|
|
|
|
|
I don't know if the Array class is sealed, if it is, then you won't be able to derive from it. I still don't think it's a useful idea for your requirement, because it doesn't allow you to add methods to Array, it only allows your class to use extend the Array class.
Regards
Senthil
_____________________________
My Blog | My Articles | WinMacro
|
|
|
|
|
Do you think it is good idea to use ArrayList that can hold some arrays and instances of my classes?
Nuray
|
|
|
|
|
|
Instead of using a class which inherits from a base vector class, I want to use System Array Class or ArrayList class so that I can combine my own methods with the methods already built in NET Framework Class Library.
Is that clear ?
Nuray
|
|
|
|
|
Pretty much all of Array's functionality is static anyway, (eg, Sort, IndexOf, BinarySearch) so why not just write a wrapper class, storing a private member of type Array and expose the functionality you require?
|
|
|
|
|
This is what I was thinking at the beginning then I thought there could be another way, like inheritance.
I usually use my own class for array operations as an ex-C++ user but why not to use built in classes and methods available in NET Framework Class Library. Any way, What I have learned from all comments until now, It is reasonable to follow your suggestion. Thank you .
Nuray
|
|
|
|
|
You can create your own array class which inherits from the System.Array class.
class MyArray : System.Array
{
public Object GetXXX(int myKey)
{
foreach (Object obj in this)
{
}
return null;
}
}
[Modified]
Bummer. The above solution doesn't work. You're not allowed to derive from Array. However, the 2 solutions below will do the job.
[/Modified]
Or you can create your own "collection" class which inherits from the CollectionBase class.
Or you can create your own "collection" class which wraps an Array object. You should implement the ICollection and IEnumerable interfaces in this case.
-- modified at 14:08 Monday 21st November, 2005
|
|
|
|
|
Why did I get such a message
"UsingArray.ArrayClass' cannot inherit from special class 'System.Array'?"
I use .Net 2003. Thank you in advance.
Nuray
|
|
|
|
|
Well shoot. It's not sealed, but apparently you're not allowed to derive from it. I found the following text on MSDN describing this.
The Array class is the base class for language implementations that support arrays. However, only the system and compilers can derive explicitly from the Array class. Users should use the array constructs provided by the language.
I'm afraid you are going to have to wrap it.
|
|
|
|
|
public class ArrayClass : System.Collections.ArrayList
{
//
};
This works as suggested by Robert Rohde
|
|
|
|
|
Sounds good. I actually prefer ArrayLists over Arrays myself.
Just be aware that ArrayList is a different class with different methods than Array. It's more like the C++ STL vector class than an array. It'll allocate memory in chunks and more than it needs in order to keep the number of memory allocations low.
|
|
|
|
|
What do you mean by "ArrayLists over Arrays" ?
Could you also read my message to Robert Rohde.
Nuray
|
|
|
|
|
All I'm saying is that the ArrayList class and the Array class are not the same thing. Although feature wise they are similar, they have different functions.
The ArrayList is a data structure that allows you to Add and Remove objects to it. It has more capabilities. An Array has a fixed size.
|
|
|
|
|
OK. I see the difference I need I more advice for complex multidimensional array operations like multiplications, divisions etc. Could you read also my email to R. Rohde?
Nuray
|
|
|
|
|
Hi Nuray,
What Robert suggests is a good idea. However, it forces you to use its built in collection accessable at CollectionBase.List() which doesn't sound like it'll work for you.
Since you said you need a "complex multidimensional array", then I suggest that you create your own Collection class from scratch and implement the ICollection and IEnumerable interfaces. This way you can add your own data structure within it. It's quite easy to make. You should look at the existing collection classes' methods as an example. I actually prefer to make my own collection class anyways because I can control which data structure it'll contain such as an ArrayList, HashTable, Queue, etc.
|
|
|
|
|
Inherit from BaseCollection. It implements much of the common fucntionalities and you just have to add some typesafe versions of Add, Remove, this[int index] etc.
|
|
|
|
|
public class ArrayClass : System.Collections.ArrayList
{
//
};
This works. my ArrayClass inherits from System.Collections.ArrayList
The problem is that I loose control over a single array like GetValue function.
Robert Rohde wrote: you just have to add some typesafe versions of Add, Remove, this[int index] etc.
What do you mean?
ArrayClass myArr = new ArrayClass();
myArr.Add("Nur") ;
This works.
|
|
|
|
|
I said CollectionBase not ArrayList. I mean something like this:
public class MyCollection : CollectionBase {
public void Add(MyItem item){
base.InnerList.Add(item);
}
public void Remove(MyItem item){
base.InnerList.Remove(item);
}
public MyItem this[int index]{
get { (MyItem)return base.InnerList[index]; }
}
}
Now you have a typesafe collection where you can be sure that all contained elements are of type MyItem.
|
|
|
|
|
I got it.
I need one more advice. Built in classes in .NET, to my knowledge, don't provide methods for array operations like multiplication, summation, division etc. I used to handle these by operator overlaoding in a class while using C++.
It seems that I can use Collectionbase for storing arrays. But how about complex array operations?
Thank you in advance.
Nuray
|
|
|
|
|
Hello All,
I'm trying to find a way to check the value of the System Idle Timer and also a way to reset it but havent found any good examples on this can someone toss me a snippet??? please
Michelle
|
|
|
|
|
Hello all,
I am using a foreign dll to read some data out of a certain file. The
problem is: This dll somehow doesn't release the file once you open it
to read the content with the dll.
So after reading the data out of a file it is blocked for write-access
until I completely close my whole application.
My question is: How can I release these files?
What I already tried:
- setting all involved objects null
- calling the GC manually
- simply waiting some time hoping that .NET will release the file
Nothing helped.
Any ideas?
Best regards,
Bertram Weckmann
Development Team
G10 Software AG
www.svizzer.com
|
|
|
|
|
Does code in the DLL that reads from the file call Dispose? If not, then you have no choice but to force garbage collection and finalization, with code like
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
Regards
Senthil
_____________________________
My Blog | My Articles | WinMacro
|
|
|
|
|
Unfortunately I do not know what the DLL exactly does. But anyway, I already tried using the GC with no success. Even with the WaitForPendingFinalizers method. Even with the Marshal.ReleaseCOMObject method...
Any other idea?
|
|
|
|