namespaces en classes

Status
Niet open voor verdere reacties.

raoul911

Gebruiker
Lid geworden
4 jul 2006
Berichten
11
Hoi,

Ik heb een aantal classes in een namespace. Nou wil ik de classes verdelen onder 2 namespaces. Probleem hier is dat de originale namespace iedere keer onder een random naam in runtime aangemaakt wordt dus ik kan geen reference naar deze namespace toevoegen in mn project.

Stel class Class1 is onderdeel van de originele namspace en in de nieuwe namespace hebben we een class met een method die er simpelweg zo uitziet:

Code:
public void ZoMaarEenMethod(Class1 inst)
{
    Console.Write(inst.totalBudget);
}

Class1 wordt nu niet herkend in de nieuwe namespace aangezien Class1 deel uitmaakt van de originele Namespace die in runtime aangemaakt wordt.

Ik heb toegang tot de originele namespace library. Ik heb lopen rommelen met System.Reflection en GetType maar het lukt me niet om dit aan de praat te krijgen.

Heeft iemand enig idee hoe je zoiets doet?

Bedankt!
 
Ik begrijp niet precies wat je bedoelt met een random namespace maar normaal gesproken kun je classes die in een andere namespace zitten gewoon aanroepen dmv de naamspace ervoor tezetten (of met de using directive)

Code:
namespace namespace1
{
    class Class1
    {
    }
}
namespace namespace2
{
    class Class2
    {
        public void ZoMaarEenMethod(namespace1.Class1 inst)
        {
            Console.Write(inst.totalBudget);
        }
    }    
}
 
Hallo Deliri,

Dit werkt helaas niet. Ik probeer iets te maken voor andere software waarvan ik dus niet de namespace kan toevoegen aan mn project omdat die iedere keer bij het opstarten of na code aanpassingen dynamisch een update maakt van de class library. Via Assembly.GetExecutingAssembly() heb ik in runtime wel toegang tot die namespace. Dus het lijkt me dat ik ook op 1 of andere manier toegang tot instances van classes in die namespace moet kunnen krijgen.

Ik ben niet zo heel bekend met c# dus ik weet niet de juiste terminologie maar ik heb zitten zoeken en kwam bijvoorbeeld Assembly.GetType() of type.IsClass tegen waarmee je denk ik de betreffende class kunt typecasten naar een Type waardoor de betreffende class in namespace2 herkenbaar wordt in de namespace1.

Ik heb alleen geen flauw idee hoe dit werkt?

Als ik bijvoorbeeld dit doe:
Code:
Type myType;

foreach (Type type1 in namespace2.GetTypes()){
  if (type1.IsClass){
    if(type1.Name == "DeClassWaarIkNaarOpZoekBen") myType= type1;
  }
}

Dan krijg ik de volgende error als ik myType ergens will toepassen:

myType is a `field' but a `type' was expected

Is het duidelijk wat ik wil en heeft iemand enig idee hoe je dit doet?
 
Laatst bewerkt:
Bedeoel je zoiets?

Code:
namespace namespace1
{
    class Class1
    {
        
        public  string testmethode()
        {
            return "haaai";
        }
    }

}
namespace namespace2
{
    class Class2
    {
        public string ZoMaarEenMethod()
        {
            object melding =string.Empty;
            Assembly asm = Assembly.GetExecutingAssembly();
            foreach (Type type in asm.GetTypes())
            {
                if (type.IsClass)
                {
                    if (type.Name == "Class1")
                    {
                        melding = type.InvokeMember("testmethode", BindingFlags.Default | BindingFlags.InvokeMethod, null, Activator.CreateInstance(type), null);
                    }
                }
            }
            return melding.ToString();
        }
    }
      
}
 
Ik probeer een instance van Class1 te gebruiken in de andere namespace.

Code:
namespace namespace1
{
    class Class1
    {
        
        public  string testmethode()
        {
            return "haaai";
        }
    }

}
namespace namespace2
{
    class Class2
    {
        public string ZoMaarEenMethod(namespace1.Class1 instance)
        {
               return instance.myString;
        }
    }
      
}
 
In principe moet dat gewoon werken. Kun je anders wat meer van je code plaatsen zodat het wat duidelijker is wat je precies bedoelt?
 
Dat werkt niet want ik kan namespace2 niet toevoegen aan mn project dus wordt Class1niet herkend.
 
als ik je goed begrijp wil je dus graag de DLL benaderen zonder de Assembly in het project te laden?

dan kan je het Type Class2 ook helemaal niet gebruiken. dan zal je die instantie als object moeten doorgeven.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan