什么时候应该在C#中使用out和ref参数?
关于约定,我有一个非常简单的问题,方法在C#中何时应该有ref或out参数 这与遵循良好的OOP,而不仅仅是懒惰或糟糕的设计有什么关系 例如,我遇到了一个类MembershipProvider(来自.NET System.Web.Security),它有一个CreateUser方法,该方法具有out for MembershipCreateStatus并返回MembershipUser 其背后的原因是否基本上是因为当有案例时,需要从该方法获取信息,但该信息不合适/无法从该方法返回什么时候应该在C#中使用out和ref参数?,c#,asp.net,oop,coding-style,C#,Asp.net,Oop,Coding Style,关于约定,我有一个非常简单的问题,方法在C#中何时应该有ref或out参数 这与遵循良好的OOP,而不仅仅是懒惰或糟糕的设计有什么关系 例如,我遇到了一个类MembershipProvider(来自.NET System.Web.Security),它有一个CreateUser方法,该方法具有out for MembershipCreateStatus并返回MembershipUser 其背后的原因是否基本上是因为当有案例时,需要从该方法获取信息,但该信息不合适/无法从该方法返回 谢谢out参数
谢谢out参数的主要用途是当您需要返回多个内容时 例如,TryParse是一个针对大量数值对象的静态方法,它在成功时需要返回true/false和强制转换值
如果需要返回多个值,有些人可能更喜欢返回具有多个属性的对象/结构;它只是首选项。out参数的主要用途是当您需要返回多个内容时 例如,TryParse是一个针对大量数值对象的静态方法,它在成功时需要返回true/false和强制转换值
如果需要返回多个值,有些人可能更喜欢返回具有多个属性的对象/结构;这只是偏好。想想下面的系统: 您有一个方法,它返回一个对象和某种状态(或更多实例)。现在,返回值有两个选项:
bool
(或enum
)状态和实际结果out
/ref
-style
对于out
/ref
-样式,我更喜欢签名,例如TryParse
:bool TryParse(out T result)
,因为这样使用它时会更自然,例如:
int foo;
if (int.TryParse(someString, out foo)) {
// do something with foo
}
鉴于
MyState state;
Foo fooInstance = FooCreator.Create(out state);
if (fooInstance != null)
* OR *
if (state == State.Success)
可能不是那么自然只要想想以下系统: 您有一个方法,它返回一个对象和某种状态(或更多实例)。现在,返回值有两个选项:
bool
(或enum
)状态和实际结果out
/ref
-style
对于out
/ref
-样式,我更喜欢签名,例如TryParse
:bool TryParse(out T result)
,因为这样使用它时会更自然,例如:
int foo;
if (int.TryParse(someString, out foo)) {
// do something with foo
}
鉴于
MyState state;
Foo fooInstance = FooCreator.Create(out state);
if (fooInstance != null)
* OR *
if (state == State.Success)
可能不是那么自然根据C#:
out关键字会导致参数为空
通过引用传递。这是相似的
指向ref关键字,但该ref除外
要求变量为
在传递之前初始化
因此,当您需要向方法传递值以及从方法接收值时,请使用ref
参数。当信息流仅从方法流向调用方时,请使用out
参数。为了完成这个故事,有一个未加修饰的value参数,它将信息传递给方法,但无法从方法接收信息
我并不认为out
和ref
只在需要从一个方法返回多个项目时使用。我总是喜欢使用out
从有副作用的方法返回值
对我来说,这就是你问题的答案。如果方法没有副作用,并且如果方法名称是与返回值含义匹配的名词,则通过函数返回值从函数返回单个值。否则,通过out
或ref
参数返回值。根据C#:
out关键字会导致参数为空
通过引用传递。这是相似的
指向ref关键字,但该ref除外
要求变量为
在传递之前初始化
因此,当您需要向方法传递值以及从方法接收值时,请使用ref
参数。当信息流仅从方法流向调用方时,请使用out
参数。为了完成这个故事,有一个未加修饰的value参数,它将信息传递给方法,但无法从方法接收信息
我并不认为out
和ref
只在需要从一个方法返回多个项目时使用。我总是喜欢使用out
从有副作用的方法返回值
对我来说,这就是你问题的答案。如果方法没有副作用,并且如果方法名称是与返回值含义匹配的名词,则通过函数返回值从函数返回单个值。否则,通过
out
或ref
参数返回值。可能重复:和@Alex部分重复。这些问题要求区分ref和out。这个问题问它们应该用来做什么。是的,我理解它们的区别和用途。这更多的是关于什么时候应该使用它,同时仍然遵循良好的面向对象原则/C#约定。可能重复:和@Alex部分重复。这些问题要求区分ref和out。这个问题问它们应该用来做什么。是的,我理解它们的区别和用途。这更多的是关于什么时候应该使用它,同时仍然遵循良好的面向对象原则/C#约定。