Je suppose que votre objectif principal était de répartir les méthodes entre différents espaces de noms, sinon cela aurait été trivial (mettre tout dans une seule classe, qu'elle soit partielle ou non, et vous avez terminé).
Les objectifs supposés sont donc les suivants:
- Avoir les 2 méthodes
Bar1
dans l'espace de noms name1
et Bar2
dans l'espace de noms name1.name2
- Pouvoir appeler l'une ou l'autre des méthodes ci-dessus dans le contexte d'une seule classe, ici
ClsFoo
Vous ne pouvez pas atteindre cela avec des classes partielles, mais vous pouvez le faire d'une manière différente: si vous utilisez des méthodes d'extension et les liez à une classe particulière, ici ClsFoo
, alors vous pouvez faire ce qui suit:
using SomeOtherNamespace;
using name1;
using name1.name2;
namespace mainClass
{
public static class mainClass
{
public static void Main()
{
var classFoo = new ClsFoo();
var count = classFoo.Bar1() + classFoo.Bar2();
Console.WriteLine($"compte = {count}"); // le résultat est 110
} // main
} // class
} // namespace
namespace SomeOtherNamespace
{
public class ClsFoo
{
// n'a pas besoin de contenir de code
} // class
} // namespace
namespace name1
{
public static class FooExt
{
public static int Bar1(this ClsFoo foo)
{
return 10;
} // méthode
} // class
} // namespace
namespace name1.name2
{
public static class FooExt
{
public static int Bar2(this ClsFoo foo)
{
return 100;
} // méthode
} // class
} // namespace
Exécutez-le en ligne
De cette manière, vous déclarez une classe vide ClsFoo
puis écrivez des méthodes d'extension Bar1()
et Bar2()
, qui résident dans des espaces de noms et des classes d'extension statiques différentes.
Remarque: Les classes d'extension peuvent avoir le même nom FooExt
tant qu'elles sont dans des espaces de noms différents, bien sûr vous pouvez également leur donner des noms différents comme FooExt1
et FooExt2
si vous le souhaitez - et l'exemple fonctionnera toujours; même dans les anciennes versions de C#.