简体   繁体   中英

c# get only child properties without parent class properties

Is there a way, and not using reflection, of elegant get only child propeties of an object?

For example:

class A 
{
    public string PropA;
}

class B : A
{
    public string PropB;
}

class C
{
    var classB_instance = new B();
    /* Only class B properties without parent so B.PropB; but no B.PropA;
}

I know it would be possible with reflection, but if this can be avoided?

You could create a specific interface for your inherited class like say

interface ISpecificB {
    string PropB;
}

and then Create your class like

public class A {
    public string PropA;
}

public class B: A, ISpecificB {
    public string PropB;
}

and only make the variable as specific as ISpecificB when creating it or returning it from a function

ISpecificB classB = new B();

classB.PropA // shouldn't be available

However, classB could still be casted as B or A which would give access to the propA and it might increase complexity in your solution

You can use the protected accessibility modifier:

The type or member can be accessed only by code in the same class or struct, or in a class that is derived from that class.

public class A 
{
    protected string PropA { get; set; }
}

public class B : A
{
    public string PropB { get; set; }
}

public class C
{
    var classB_instance = new B();
    //You can't access classB_instance.PropA
}

You could mark PropA as private, look at https://msdn.microsoft.com/en-us/library/ms173121.aspx :

private The type or member can be accessed only by code in the same class or struct.

just a short note: most of the time, I use reflection to do exactly the opposite: access things I am not allowed, for example, because they are private... ;-) reflection is not a "tool" to hide something, AFAIK. it opens every door which is usually locked ;-)

Whether you can do this way ?

class A 
{
   private string PropA; 
}

class B : A
{
 public string PropB;
}
class C
{
  var classB_instance = new B();     
}

Declare variable PropA of Class A as private variable(as show in below code):

class A 
{
    private string PropA;
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM