Хорошо, я думаю, что разгадал загадку.Вы реализуете Foo_Impl в двух частях.
Одна из них - это реализация public partial class Foo_Impl {}
, которая по сути является пустым классом, который ничего не делает, поэтому он не будет использоваться в любом смысле.
Другой реализован как член private partial class Foo_Impl{}
класса Foo:Foo_Impl
.Вот где вы размещаете все свои секретные функции, которые могут использоваться только самим Foo.Любой класс может наследовать от публичной частичной части Foo_Impl
, но не может использовать какую-либо частную функциональность, доступную только Foo через его личный член Foo_Impl.Пример class Voyeur:Foo_Impl
используется для иллюстрации того, что каждое тело может наследовать, но только Foo может его создать и использовать.Voyeur
не может заглянуть в Foo_Impl, чтобы увидеть его полезные приватные части;).
using System;
static class Program
{
static void Main(string[] args)
{
new Foo();
new Voyeur();
Console.ReadLine();
}
}
public partial class Foo_Impl
{
// NOTHING in this public partial implementation.
// Visible but cannot be used for anything
protected Foo_Impl()
{
Console.Write("public partial Foo_Impl's protected constructor ");
}
}
public class Foo : Foo_Impl
{
private partial class Foo_Impl {
// put all your secret implementations here that you dont want
// any other class to accidentally use (except Foo)
public int fooAccessibleVariable=42;
public Foo_Impl ()
{
Console.Write("private partial Foo_Impl contructor ");
}
}
public Foo():base() // calls the public partial Foo_Impl's construtor
{
Console.WriteLine(" called from Foo()");
Foo_Impl myFoo_Impl = new Foo_Impl(); // calls the private partial Foo_Imp's constructor
Console.WriteLine(" called from Foo()");
Console.WriteLine("private Foo_Impl's variabe thats only accessible to Foo: {0}",
myFoo_Impl.fooAccessibleVariable);
}
}
class Voyeur:Foo_Impl
{
public Voyeur():base()// calls the public partial Foo_Impl's contructor
{
Console.WriteLine(" called from Voyeur()");
}
}