Come già sottolineato da @ReedCopsey, il modo per estendere la funzionalità di una classe sigillata è con un Extension Method. Qui è uno che farà quello che stai chiedendo:
public sealed class MyClass
{
int a; int b;
int Add (int x, int y)
{
return x + y;
}
}
public static class MyClassExtensions
{
public static decimal Average(this MyClass value, int x, int y)
{
return (x + y)/2M;
}
}
Usage:
var myClass = new MyClass();
// returns 15
var avg = myClass.Average(10, 20);
EDIT Come richiesto, ecco il tutto il codice. Creare una nuova applicazione console in Visual Studio, sostituire tutto il codice nel file Program.cs
con il codice seguente ed eseguire.
using System;
namespace ConsoleApplication1
{
public sealed class MyClass
{
public int X { get; private set; }
public int Y { get; private set; }
public MyClass(int x, int y)
{
this.X = x;
this.Y = y;
}
int Add()
{
return this.X + this.Y;
}
}
public static class MyClassExtensions
{
public static decimal Average(this MyClass value)
{
return (value.X + value.Y)/2M;
}
}
class Program
{
static void Main(string[] args)
{
var myClass = new MyClass(10, 20);
var avg = myClass.Average();
Console.WriteLine(avg);
Console.ReadLine();
}
}
}
fonte
2012-06-27 20:38:57
Stack Overflow non è un sostituto per un libro o un tutorial. E, in particolare, l'intero punto di * sealed * è che non è possibile estenderlo. –
non è questo un ossimoro? – Didaxis
@AnthonyPegram - Sopravvivere senza WSOIN? – Oded