using Wanhjor.ObjectInspector;
private string _privateField = "This field it's so private...";
private string PrivateProperty { get; set; } = "You can't read this";
private void PrivateConsoleWrite(string line)
public static class ObjectFactory
public static object New() => new SomeClass();
public interface IDuckSomeClass
[Duck(Name="_privateField", Kind = DuckKind.Field, Flags = DuckAttribute.AllFlags)]
string PrivateField { get; set; }
[Duck(Flags = DuckAttribute.AllFlags)]
string PrivateProperty { get; set; }
[Duck(Flags = DuckAttribute.AllFlags)]
void PrivateConsoleWrite(string line);
public static void Main()
var obj = OtherAssembly.ObjectFactory.New();
public static void HandleObject(object obj)
var duck = obj.DuckAs<IDuckSomeClass>();
Console.WriteLine(duck.PrivateField);
Console.WriteLine(duck.PrivateProperty);
duck.PrivateField += " or not!";
duck.PrivateProperty += ". I think I can!";
Console.WriteLine(duck.PrivateField);
Console.WriteLine(duck.PrivateProperty);
duck.PrivateConsoleWrite("Sooo private...");