2

入力/出力として複数のタイプを受け入れる一種のプロパティの代替を作成しようとしています。

これは、醜い解決策の疑似コードです。

http://pastebin.com/gbh4SrZX

基本的に、私はデータの一部を持っており、それに複数のタイプを割り当てて、それに応じて反応できるようにする必要があります。操作するデータがあり、データを操作している場合は既に読み込まれている同じコードを維持しながら、必要に応じてファイル名からそれらをロードする効率的な方法が必要です。

これは素晴らしいでしょう:

SomeDataClass data1 = new SomeDataClass();
SomeDataClass data2 = new SomeDataClass();

data1.Data = "somefile.dat";
data2.Data = data1.Data;

SomeDataClass.Data は文字列型ではありません。

4

3 に答える 3

1

の使用を検討しましたdynamicか?

class A {
    public dynamic property1 { get; set; }
    public dynamic property2 { get; set; }
}

class Program {

    static void Main(string[] args) {

        A a = new A();
        A b = new A();

        a.property1 = "hello world!";
        b.property2 = a.property1;

        Console.WriteLine(b.property2); // writes "hello world!"
    }
}
于 2012-08-15T07:12:22.227 に答える
0

その多くは、暗黙の変換演算子を使用して行うことができます。つまり、

class SomeDataClass {
    public SomeData Data {get;set;}
}
class SomeData {
    static SomeData Load(string path) {
        return new SomeData(); // TODO
    }
    public static implicit operator SomeData(string path)
    {
        return Load(path);
    }
}
static class Program {
    static void Main()
    {
        SomeDataClass data1 = new SomeDataClass();
        SomeDataClass data2 = new SomeDataClass();

        data1.Data = "somefile.dat"; // this is a load
        data2.Data = data1.Data; // this is not a load
    }
}

でも!率直に言って、操作を明示的にする方が望ましいと思います。

class SomeDataClass {
    public SomeData Data {get;set;}
}
class SomeData {
    public static SomeData Load(string path) {
        return new SomeData(); // TODO
    }
}
static class Program {
    static void Main()
    {
        SomeDataClass data1 = new SomeDataClass();
        SomeDataClass data2 = new SomeDataClass();

        data1.Data = SomeData.Load("somefile.dat");
        data2.Data = data1.Data;
    }
}
于 2012-08-15T07:16:06.210 に答える
0

これで解決しようとしている問題が実際に何であるかはわかりませんが、バイト[]を使用して、ディスクまたは他の場所からロードされたデータのストリームを操作する方が良いようです。

また、動的およびオブジェクトを使用する代わりに、共通のインターフェイスにコーディングすることも検討してください。

于 2012-08-15T07:22:20.667 に答える