|
(Type your message here)
--------------------------------
From: subramaniam chandrasekaran
Hi
I am using XML serialization to serialize an xml. I want to apply business rules to this object,rules are defined in the database. I am trying to get the value in the serialized object and apply the rule. I am trying to use reflection to get the value in the serialized object. Is there a way i can retrieve all the values in the serialized object? My xml has complex nodes inside the root element. Any sort of help is really appreciated.
subbu
|
|
|
|
|
I have one C# application (APP1) starting a second C# application (APP2).
If APP1 starts APP2 something like the following, everything works okay:
\\.\C$\APP2.EXE
If APP1 starts APP2 something like the following, I get a Security.Permission problem:
\\CAROL-LOVE\C$\APP2.EXE
The following should give you an idea of the code I'm trying to run. What I'm
trying to do is so simple that it's infuriating that this much time is being taken to get it to work!!!!!!
static void Main(string[] args)
{
Application.Run(new CFormMAINAPP2(args));
}
public CFormMAINAPP2(string[] args)
{
string[] argsXXX = args; // Security.Permission exception here...
}
|
|
|
|
|
|
How can I add my own methods to Array Class of NET Framework Class Library ?
For example, I want to use it like
Array.GetXXX();
Thank you in advance.
Nuray
|
|
|
|
|
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
|
|
|
|