2017-02-03 5 views
2

Go имеет nice feature, где члены вложенной структуры автоматически доступны через родительский структуры:Членский проезд в 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 

То же самое, возможно, в C#, например, с использованием implicit слепков?

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

Нет, нет ничего подобного, что в C#. Вы всегда можете добавить свое собственное свойство, которое делегирует. –

ответ

0

В C# такой концепции нет. Вы можете добавить такие свойства самостоятельно, но это будет очень запутанным для других разработчиков, которые видят ваш код.

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; 

Однако при переходе на классы вместо структур - вы можете иметь подобное поведение с помощью inheritance:

class B 
{ 
    public int x; 
} 

class A : B 
{ 
} 

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

Внедренный Golang структура может рассматриваться как своего рода «наследство». Если вы хотите моделировать это поведение в C#, вы должны использовать класс вместо struct (here if you want know the difference between struct and class).
Что-то вроде этого:

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

Это правда, но я бы предпочел использовать композиционный стиль в C#. Например, Mixins намного лучше с этим синтаксическим сахаром. – sdgfsdh

Смежные вопросы