2008-11-11 9 views
0

J'ai besoin de convertir plusieurs classes Java en C#, mais j'ai rencontré quelques problèmes.Conversion de Java en C#

En Java j'ai hiérarchie de classe suivante:

public abstract class AbstractObject { 
    public String getId() { 
     return id; 
    } 
} 

public class ConcreteObject extends AbstractObject { 
    public void setId(String id) { 
     this.id= id; 
    } 
} 

Il y a la mise en œuvre de AbstractObject qui ne ont pas besoin d'avoir setId() définie, donc je ne peux pas le déplacer dans la hiérarchie.

Comment le convertir en C# en utilisant les propriétés? Est-ce possible?

Répondre

2

Je suggère d'utiliser les appels de méthode comme vous l'avez déjà souligné pour vous assurer que l'utilisation de la classe est claire pour l'appelant. Si vous souhaitez l'implémenter à l'aide des propriétés, vous pouvez effectuer les opérations suivantes (vous trouverez une documentation pour le nouveau mot-clé here).

public abstract class AbstractObject { 
    protected string id; 
    public string Id 
    { 
     get { return id; } 
    } 
} 

public class ConcreteObject : AbstractObject 
{ 
    public new string Id 
    { 
     get { return base.Id; } 
     set { id = value; } 
    } 
} 
3

Lorsque vous ne fournissez que la partie get d'une propriété dans .Net, vous indiquez explicitement au compilateur que cette propriété est en lecture seule. C'est une affaire plus importante que de ne pas fournir un set. Cela est évident dans la version vb de la syntaxe de la propriété, où vous devez également déclarer explicitement que la propriété est ReadOnly. Ce que vous pourriez faire est de fournir à la fois un getter et un setter, mais jetez un NotImplementedException dans le setter abstrait, décorez-le avec les attributs et le document appropriés pour que personne ne l'utilise à moins que le setter ait été surchargé . Sinon, il est probablement préférable de conserver ces méthodes comme méthodes, afin d'éviter une déconnexion entre les versions Java et .Net du code.