9

人々

私は次のように封印されたクラスを持っています。この封印されたクラスを拡張して、xとyの平均を返すメソッドを追加したいと思います。これは「this」を使用した拡張メソッドだけではありません:(誰かが「Sealedクラスの拡張」の概念とその「リアルタイムの使用法と利点」を理解するのを手伝ってくれませんか

class Sealed A       
{ 
    int a; int b;    
    int Add (int x, int y)    
    {
        return x+y;
    }
}

ありがとうございました....

4

2 に答える 2

21

@ReedCopseyがすでに指摘しているように、封印されたクラスの機能を拡張する方法は、Extensionメソッドを使用することです。これがあなたが求めていることをするものです:

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;
    }
}

使用法:

    var myClass = new MyClass();

    // returns 15
    var avg = myClass.Average(10, 20);

編集要求に応じて、ここにすべてのコードがあります。Visual Studioで新しいコンソールアプリケーションを作成し、Program.csファイル内のすべてのコードを以下のコードに置き換えて実行します。

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();
        }
    }
}
于 2012-06-27T20:38:57.297 に答える
10

誰かが「封印されたクラスの拡張」の概念とその「リアルタイムの使用法と利点」を理解するのを手伝ってくれませんか

基本的な概念は、封印されたクラスは、それをサブクラス化(拡張)できないことを意味します。これが、クラスが封印されている理由です。これにより、クラスが「封印」され、拡張できなくなります。

拡張メソッドを使用すると、クラスを拡張しているように見えるメソッドを作成できますが、実際には通常の静的メソッドです。コンパイラはこのメソッドを呼び出し、クラスインスタンスを渡します。

于 2012-06-27T20:30:48.097 に答える