2017-02-03 2 views
2

Go a un nice feature où les membres d'une struct imbriqué sont automatiquement accessibles via son struct parent:Passage en C#?

// Server exposes all the methods that Logger has 
type Server struct { 
    Host string 
    Port int 
    *log.Logger 
} 

// initialize the embedded type the usual way 
server := &Server{"localhost", 80, log.New(...)} 

// methods implemented on the embedded struct are passed through 
server.Log(...) // calls server.Logger.Log(...) 

// the field name of the embedded type is its type name (in this case Logger) 
var logger *log.Logger = server.Logger 

Est-ce même possible en C#, par exemple en utilisant implicit moulages?

struct B 
{ 
    public int x; 
} 

struct A 
{ 
    public B b; 
} 

var a = new A(); 

a.b.x = 1; // How it usually works 
a.x = 1; // How Go works, assuming x is unambiguous 
+8

Non, il n'y a rien comme ça en C#. Vous pouvez toujours ajouter votre propre propriété que les délégués. –

Répondre

0

Il n'existe pas de concept de ce type en C#. Vous pouvez ajouter de telles propriétés par vous-même, mais cela sera très déroutant pour les autres développeurs qui voient votre code.

struct B 
{ 
    public int x; 
} 

struct A 
{ 
    public B b; 
    public int x { 
     get { return b.x; } 
     set { b.x = value; } 
    } 
} 

} 

var a = new A(); 

a.b.x = 1; 
a.x = 1; 

Toutefois, si vous passez à des classes au lieu de struct - vous pouvez avoir un comportement similaire en utilisant inheritance:

class B 
{ 
    public int x; 
} 

class A : B 
{ 
} 

var a = new A(); 
a.x = 1; 
0

Un struct golang intégré peut être considéré comme une sorte de « héritage ». Si vous voulez simuler ce comportement en C#, vous devez utiliser une classe au lieu de struct (here if you want know the difference between struct and class).
Quelque chose comme ceci:

public class A { 
    public int X {get; set;} 
} 
public class B : A{ 
    B : base() {} 
} 
... 
var a = new B(); 
a.X = 24; 
+0

C'est vrai, mais je préfère utiliser un style de composition en C#. Les mixines, par exemple, sont beaucoup plus agréables avec ce sucre syntactique. – sdgfsdh