2012-07-21 86 views
1

对不起,我不是很清楚。这是很难解释我想要做什么。我想做延伸方法,但让他们分开。所以举例...扩展扩展方法?或者其他的东西?

bool b = true; 
char c = b.bool_ext.convert_to_YorN(); 
int i = b.bool_ext.convert_to_1or0(); 

是这样的可能吗?谢谢!

+0

隔离如何? – 2012-07-21 00:53:41

+1

@mellamokb我明确表示这是一个例子。这就是说,我当然希望你的代码没有充满无关的评论... – Ber53rker 2012-07-21 00:54:11

+0

你可以这样做:'b.bool_ext()。convert_to_YorN()' – 2012-07-21 00:56:19

回答

3

如果你希望他们“隔离”,那么你就必须要么创造自己的类型:

public struct MyBool { 
    public MyBool(bool value) : this() { 
     this.Value = value; 
    } 

    public bool Value { get; private set; } 
} 

public static MyBoolExtensions { 
    public static char convert_to_YorN(this MyBool value) { 
     return value.Value ? 'Y' : 'N'; 
    } 
} 

public static BooleanExtensions { 
    public static MyBool bool_ext(this bool value) { 
     return new MyBool(value); 
    } 
} 

其中可用于像:

bool b = true; 
char c = b.bool_ext().convert_to_YorN(); 

或者只是使用他们作为静态方法:

public class MyBoolConverters { 
    public static char convert_to_YorN(bool value) { 
     return value.Value ? 'Y' : 'N'; 
    } 
} 

哪些可以像使用:

bool b = true; 
char c = MyBoolConverters.convert_to_YorN(b); 

但是你不能像你展示的那样对它们进行分类。

5

没有那是不可能的,该bool_ext将是一个延伸财产bool,你不能做当前的扩展特性,只有扩展方法。