È statico che farà qualsiasi differenza in questo frammento di codice

-1

Sono stato a un colloquio e mi è stata fatta questa domanda: c'è qualche differenza nell'aggiunta o nella rimozione della parola chiave static in queste classi?

So cosa significa static ma la mia comprensione di questo punto è debole.

class Program
{
    static void Main(string[] args)
    {
            aAsposeNew.MultipleInstancesProblem();
            Console.ReadLine();
    }
}

public static class aAsposeNew
{
    public static void MultipleInstancesProblem()
    {
            var task1 = Task.Run(() => CreateDocument("document1.pdf"));
            var task2 = Task.Run(() => CreateDocument("document2.pdf"));
            var task3 = Task.Run(() => CreateDocument("document3.pdf"));
    }

    public static void CreateDocument(string documentName)
    {
        var doc = new Document();
        doc.Pages.Add();

        var table = new Aspose.Pdf.Table();
        var row = table.Rows.Add();
        table.ColumnWidths = "600";
        var hf =
            new HtmlFragment(@"<ul>
                                 <li>Internal HR Meeting Outcome</li>
                                 <li>Internal HR Meeting Outcome January 2015</li>
                               </ul>");
        var cell = row.Cells.Add();
        cell.Paragraphs.Add(hf);
        doc.Pages[1].Paragraphs.Add(table);

        doc.Save(@"C:\Output\" + documentName);
    }
  }

e senza la parola chiave static :

class Program
{
    static void Main(string[] args)
    {
            aAsposeNew aAN = new aAsposeNew();
            aAN.MultipleInstancesProblem();
            Console.ReadLine();
    }
}

public class aAsposeNew
{
    public void MultipleInstancesProblem()
    {
            var task1 = Task.Run(() => CreateDocument("document1.pdf"));
            var task2 = Task.Run(() => CreateDocument("document2.pdf"));
            var task3 = Task.Run(() => CreateDocument("document3.pdf"));
    }

    public void CreateDocument(string documentName)
    {
        var doc = new Document();
        doc.Pages.Add();

        var table = new Aspose.Pdf.Table();
        var row = table.Rows.Add();
        table.ColumnWidths = "600";
        var hf =
            new HtmlFragment(@"<ul>
                                 <li>Internal HR Meeting Outcome</li>
                                 <li>Internal HR Meeting Outcome January 2015</li>
                               </ul>");
        var cell = row.Cells.Add();
        cell.Paragraphs.Add(hf);
        doc.Pages[1].Paragraphs.Add(table);

        doc.Save(@"C:\Output\" + documentName);
    }
  }
    
posta Mathematics 17.02.2015 - 14:13
fonte

4 risposte

1

No, non ci saranno differenze. I metodi non modificano lo stato della classe, quindi avere statico o non avere statico non ha alcun effetto. Sono esattamente gli stessi, meno il fatto che hai bisogno di un'istanza della classe se non è statica.

    
risposta data 17.02.2015 - 15:00
fonte
1

Oltre alle due opzioni pubblicate (metodo statico in classe statica, metodo di istanza in classe non statica), esiste una terza opzione: un metodo statico in una classe non statica:

class Program
{
    static void Main(string[] args)
    {
        aAsposeNew.MultipleInstancesProblem();
        Console.ReadLine();
    }
}

public class aAsposeNew
{
    public static void MultipleInstancesProblem()
    {
        // elided
    }
}

Distinguo tra i casi come se la classe avesse alcuni campi di istanza (o proprietà automatiche ) , sarebbe una differenza, poiché ci sarebbe un impatto sulla memoria dall'istanziazione della classe con new che non si otterrebbe se fosse un metodo statico. Per il tuo codice questo non ha importanza in quanto non ci sono campi di istanza o proprietà automatiche.

Questo metodo statico in caso di classe non statica è sempre lo stesso del metodo statico in una classe statica, che, nel tuo caso, è uguale a un metodo di istanza in una classe di istanza (diverso dal modo in cui il metodo è chiamato come @craysiii indica nella sua risposta.

    
risposta data 18.02.2015 - 09:25
fonte
1

In questa situazione, come detto, non farà differenza. In effetti sarebbe una buona pratica rendere la classe statica in quanto i metodi di contenimento sono statici e non è necessario accedere a nessun membro di istanza non statico.

Uso la classe statica per renderlo accessibile per le costanti, esponendo metodi statici per realizzare unità di lavoro indipendenti, ecc. Una classe statica viene caricata dal tempo di esecuzione e dura per la vita dell'app. Pertanto, siamo sicuri di ottenere sempre le funzionalità di cui abbiamo bisogno senza creare istanze.

    
risposta data 19.02.2015 - 03:46
fonte
0

Non ci sarà differenza nell'esecuzione delle funzioni, ma il modo in cui viene chiamato sarà leggermente diverso. Suggerirei di renderlo statico, in quanto non ha bisogno di un'istanza di classe da eseguire.

    
risposta data 17.02.2015 - 17:31
fonte

Leggi altre domande sui tag