IL e case-sensitivity

1

Citato da Una breve introduzione a Codice IL, CLR, CTS, CLS e JIT In .NET

CLS stands for Common Language Specifications. It is a subset of CTS. CLS is a set of rules or guidelines which if followed ensures that code written in one .NET language can be used by another .NET language. For example one rule is that we cannot have member functions with same name with case difference only i.e we should not have add() and Add(). This may work in C# because it is case-sensitive but if try to use that C# code in VB.NET, it is not possible because VB.NET is not case-sensitive.

In base al testo sopra, voglio confermare due punti qui:

  1. La distinzione tra maiuscole e minuscole di IL è una condizione solo per le funzioni membro e non per le proprietà membro?
  2. È vero che C # non potrebbe essere interoperabile con VB.NET se non si è occupato della distinzione tra maiuscole e minuscole?
posta Khadim Ali 02.11.2013 - 18:35
fonte

2 risposte

2

La restrizione sulla sensibilità al maiuscolo / minuscolo si applica a tutti i membri (campi, metodi, proprietà) visibili agli altri assiemi . Pertanto, quanto segue è OK:

[CLSCompliant(true)]
public class C
{
    private int i;
    public int I { get { return i; } set { i = value; } }
}

ma ciò che segue non è:

[CLSCompliant(true)]
public class C
{
    public int i;
    public int I { get { return i; } set { i = value; } }
}

e il seguente non è né:

[CLSCompliant(true)]
public class C
{
    protected int i;
    public int I { get { return i; } set { i = value; } }
}

poiché una classe VB.NET potrebbe voler ereditare dalla classe C .

Se il secondo esempio sopra fosse in una libreria C # e un progetto VB.NET tentasse di usarlo, il seguente codice non verrebbe compilato:

Dim c As New C()
Console.WriteLine(c.I)

Questo è l'errore in fase di compilazione che il compilatore VB.NET avrebbe lanciato :

'I' is ambiguous because multiple kinds of members with this name exist in class 'C'.

    
risposta data 03.11.2013 - 11:26
fonte
1

Does the case-sensitivity of IL is a condition for member functions only, and not for member properties?

Le proprietà C # sono implementate internamente come metodi speciali denominati accessors pertanto la citazione sopra riportata si applica sia a metodi e proprietà.

Is it true that C# wouldn't be inter-operable with VB.NET if it didn't take care of the case sensitivity?

In teoria, potrebbe essere possibile scrivere C # compatibile con VB.NET. Tuttavia, non è solo la distinzione tra maiuscole e minuscole. Ad esempio, molte parole chiave appaiono in una lingua e non l'altra richiede una sintassi speciale (che sia C # che VB.NET forniscono). I tipi non firmati non possono essere esposti e gli operatori non possono essere sovraccaricati. Per ulteriori dettagli, consulta link .

Piuttosto che doverli controllare manualmente, Microsoft ha creato CLS come modo per applicarlo a livello di programmazione. Ancora più importante, consente anche alle lingue diverse da VB.NET e C # di interoperare attraverso un runtime comune, incluso il flessibile privo di una sintassi speciale per identificatori non validi.

    
risposta data 03.11.2013 - 01:01
fonte

Leggi altre domande sui tag