c# - Can I use Generics to get the property of a passed struct? -


i trying use generics pass in struct function , have function access properties. want utilize generics more because supposed "safe , efficient". here's code looks like.

class

class foo {      struct {         int a;        int b     }      struct b {        int a;        int b;     }  } 

generic function

void bar<t> (t input) {     var = input.a;       //this says know nothing } 

function call

bar<foo.a> (aobj); 

can generics used this?(that access object's data members...) or can create over-loaded method? parts of objects trying access function common both types, that's why thought use generics.

using generics not imply can use duck typing. c# statically typed language, need following:

first, define interface defines common interface of a , b:

interface ihasab {     int { get; }     int b { get; } } 

then, have structs implement interface:

struct : ihasab {     public a(int a, int b)     {         = a;         b = b;     }      public int { get; }  // note: `a` , `b` properties, not fields     public int b { get; }  // before; interfaces not allow declare fields.      // note also: mutable structs bad idea! that's why implement     // `a` , `b` read-only properties. }  struct b : ihasab { … }  // same `a` 

now can implement method bar additional generic type parameter constraint where t : ihasab:

void bar<t> (t input) t : ihasab {     var = input.a; } 

the constraint on t lets compiler know can expect t be. knows t type implements ihasab, , therefore has 2 properties a , b (since interface consists of). that's why can access .a on input.

note don't need make bar generic:

void bar(ihasab input) {     var = input.a; } 

in latter case, note input reference-typed parameter. if passed 1 of a or b structs method, have boxed (i.e. turned value type reference type). there's overhead involved in that.

i won't go further dangers of mutable structs , boxing can happen in situations structs implement interfaces, since that's quite different matter altogether; recommend spend little time researching these topics. ;-)


Comments

Popular posts from this blog

magento2 - Magento 2 admin grid add filter to collection -

Android volley - avoid multiple requests of the same kind to the server? -

Combining PHP Registration and Login into one class with multiple functions in one PHP file -