Avatar billede sushiboy Nybegynder
10. oktober 2010 - 20:27 Der er 6 kommentarer og
1 løsning

Hjælp til syntax til C#-metodesignatur

Hej med jer.

Jeg kigger pt. på en auto-genereret C#-klasse ud fra en WSDL-fil, og én af metoderne ser således ud:


[System.Web.Services.Protocols.SoapHeaderAttribute("AuthHeaderValue")]
[System.Web.Services.WebMethodAttribute()]
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://xxx.org/Get", RequestNamespace="http://xxx.org/", ResponseNamespace="http://xxx.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped, Binding="MySoap")]
public virtual someObject Get([System.Xml.Serialization.XmlElementAttribute(ElementName="id")] string id) { ... }

Jeg kunne tænke mig at vide, hvad [...] der "præfikser" et parameter i ovenstående metodesignatur betyder (har aldrig set den syntax før). Har syntaxet et navn, man kan google på? Mere specifikt mener jeg [System.Xml.Serialization.XmlElementAttribute(ElementName="id")]-delen.
Avatar billede arne_v Ekspert
10. oktober 2010 - 21:00 #1
[] er såkaldte attributter (i .NET terminologi - i Java kalder man dem annotations).
Avatar billede arne_v Ekspert
10. oktober 2010 - 21:02 #2
Der er noget som ikke udføres som sådan man noget andet kode kan kigge på det inden den kalder koden og gøre forskellige udfra det.
Avatar billede arne_v Ekspert
10. oktober 2010 - 21:09 #3
Lad mig komme med et eksemplet som er lidt simplere end SOAP web services:

using System;
using System.Xml.Serialization;

namespace E
{
    public class Data1
    {
        public Data1()
        {
            Id = "Some value";
        }
        public string Id { get; set; }
    }
    [XmlRoot(ElementName="MyData2")]
    public class Data2
    {
        public Data2()
        {
            Id = "Some value";
        }
        [XmlElement(ElementName="MyId")]
        public string Id { get; set; }
    }
    public class Program
    {
        public static void Main(string[] args)
        {
            XmlSerializer ser1 = new XmlSerializer(typeof(Data1));
            ser1.Serialize(Console.Out, new Data1());
            XmlSerializer ser2 = new XmlSerializer(typeof(Data2));
            ser2.Serialize(Console.Out, new Data2());
            Console.ReadKey();
        }
    }
}

outputter:

<?xml version="1.0" encoding="IBM437"?>
<Data1 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Id>Some value</Id>
</Data1>
<?xml version="1.0" encoding="IBM437"?>
<MyData2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <MyId>Some value</MyId>
</MyData2>

fordi XmlSerializer bruger attributterne til at bestemme navnene i XML.
Avatar billede sushiboy Nybegynder
12. oktober 2010 - 09:14 #4
Hej Arne, tak for dit svar og du får pointsene. Så hvis jeg forstår det rigtigt, har attributten ikke nogen relevans, så længe jeg implementerer koden i C#. Det er kun, hvis man vil generere en XML-fil ud af koden at den bruges?
Avatar billede sushiboy Nybegynder
12. oktober 2010 - 09:49 #5
Du skal vist skrive noget i kommentarfeltet og vælge "Svar", inden jeg kan give dig points?
Avatar billede arne_v Ekspert
12. oktober 2010 - 15:23 #6
Attributter udfoeres ikke af koden der har attributterne, men den kan faa ekstern kode til at aendre opfoersel.

Og et svar.
Avatar billede arne_v Ekspert
12. oktober 2010 - 15:23 #7
om igen
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester