Tag: 方法

传递引用类型对象并更改值

我试图将引用类型对象传递给方法并从那里更改它。 当我更改它时,我没有对传递给方法的变量进行更改。 这是一个例子: public interface IPerson { string Name { get; } } public class Teacher : IPerson { public string Name { get; set; } public string LastName { get; set; } } //…… public void CreateTeacher(IPerson teacher) { teacher = new Teacher() { Name = “Teacher name”, LastName = “Teacher’s last name”}; } […]

使用参数动态调用dll和方法

基本上我试图通过名称调用一个DLL,实例化一个对象,然后在该DLL中按名称调用一个方法。 我得到了一个“调用目标引发了exception。” 在Method.Invoke期间。 我很确定我的问题是对方法的参数进行类型转换。 我想知道是否有人对此exception有任何意见。 此外,欢迎任何有关如何修改我的方法的建议。 public void calldll(string dllName, string typeName, string methodName, string arguments) { string[] argumentArray = arguments.Split(new char[] { ‘|’ }, StringSplitOptions.None); Assembly assembly = Assembly.LoadFrom(dllName); System.Type type = assembly.GetType(typeName); Object o = Activator.CreateInstance(type); MethodInfo method = type.GetMethod(methodName); ParameterInfo[] parameters = method.GetParameters(); object[] methodParameters = new object[parameters.GetLength(0)]; for (int i = […]

为什么C#允许只有方法的最后一个参数是“可变长度”

据我所知,C#允许只有方法的最后一个参数是“可变长度”,例如: T f(A a, params B[] b)允许如果你有A r; …. B x, y, z; …. A r; …. B x, y, z; …. A r; …. B x, y, z; ….你可以像f (r, x, y, z)一样调用f。 为什么C#也没有定义类似的东西: T f(params A[] a, params B[] b)

使用“方法隐藏”有什么意义?

可能重复: 用一个有效的例子隐藏在c#中的方法。为什么它是在框架中实现的。 什么是现实世界的优势。 我想知道方法隐藏在c#中如何有用? 如果你深入研究这个概念,你会发现隐藏的方法令人困惑,并驱使我们采用意大利面条代码风格。这有一些原因: 1-如果在Derived类中需要一个新方法,则可以在派生类中使用新名称定义新方法。 2 – 在使用upcasting时以多态方式使用,将无法实现预期的行为,这可能会令人困惑。 (特别是如果Base类和Derived Class位于不同的库中并且您希望在代码中的某个位置使用它们的多态性,这种奇怪的行为可能会非常明显和明显) class Base { public void Method() { Console.WriteLine(“I am Base Class”); } } class Derived: Base { public new void Method() { Console.WriteLine(“I am Derived Class”);} } class Program { static void Main(string[] args) { Base C = new Derived(); C.Method(); //output:”I am Base […]

有没有简单的方法来创建方法并在C#中动态设置它的主体?

我在字符串中持有方法体。 我想动态创建方法。 但我不知道,如何设置它的身体。 我看到使用CodeDom非常乏味。 我看到使用Emit和OpCodes。 有没有办法从字符串变量中使用现成的代码? string method_body = “return \”Hello, world!\”;”; //there is method body DynamicMethod dm = new System.Reflection.Emit.DynamicMethod(“My_method”, typeof(string), new Type[] { }); //any way to create method dynamically //any way to set body string result = (string)dm.Invoke(…); //I need write result in variable

数据绑定到WPF中的方法

我无法将TextBox.Text属性数据绑定到对象的方法。 这个想法是允许用户在TextBox写入一个文件名,然后使用TextBlock输出该文件的扩展名。 class GetFileInfo { public string GetFileExtension(string fileName) { return Path.GetExtension(fileName); } } 这是我的XAML: abc.text 由于某种原因,它没有做任何事情。 任何可以指出可能是什么原因? 这是我在设计师和运行应用程序时看到的内容: 替代文字http://img64.imageshack.us/img64/6922/f0rki14feo3oa3groxm5kgm.png 以下是我在运行时尝试设置其他文本时会发生的情况: alt text http://img684.imageshack.us/img684/1057/b52pnq1dm4i23qivizvpaqq.png以下是de debugger在运行时尝试设置其他文本时给出的错误: System.Windows.Data错误:8:无法将目标值保存到源。 BindingExpression:路径= MethodParameters [0]; DataItem =’ObjectDataProvider’(HashCode = 2207369); target元素是’TextBox’(Name =’textBox1’); target属性为’Text’(类型’String’)ArgumentException:’System.ArgumentException:’MS.Internal.Data.PropertyPathWorker + IListIndexerArg’类型的对象无法转换为’System.Int32’类型。 System.Reflection.MethodBase.CheckArguments(Object [])中System.RuntimeType.CheckValue(对象值,Binder活页夹,CultureInfo文化,BindingFlags invokeAttr)的System.RuntimeType.TryChangeType(Object value,Binder binder,CultureInfo culture,Boolean needsSpecialCast) System.Reflection.RuntimeMethodInfo中的System.Reflection.RuntimeMethodInfo.Invoke(Object obj,BindingFlags invokeAttr,Binder binder,Object []参数,CultureInfo culture,Boolean skipVisibilityChecks)中的参数,Binder binder,BindingFlags invokeAttr,CultureInfo culture,Signature […]

C#:传递通用对象

我想要一个通用的打印function… PrintGeneric(T)…在下面的例子中,我缺少什么? 一如既往地感谢您的帮助/见解…… public interface ITest {} public class MyClass1 : ITest { public string myvar = “hello 1”; } public class MyClass2 : ITest { public string myvar = “hello 2”; } class DoSomethingClass { static void Main() { MyClass1 test1 = new MyClass1(); MyClass2 test2 = new MyClass2(); Console.WriteLine(test1.myvar); Console.WriteLine(test2.myvar); Console.WriteLine(test1.GetType()); PrintGeneric(test1); PrintGeneric(test2); […]

委托实例和方法指针之间有什么区别?

我认为委托实例可以与函数实例互换。 请使用以下代码: delegate int AddDelegate(int a, int b); AddDelegate DelegateInstance; public void DoStuff() { //I can call this without a delegate “instance”: MethodThatTakesAdd(Add); //I can also call it WITH a delegate “instance” DelegateInstance = Add; MethodThatTakesAdd(DelegateInstance); } public int Add(int a, int b) { return a + b; } public void MethodThatTakesAdd(AddDelegate addFunction) { Console.WriteLine(addFunction(1, […]

为什么我不能在另一个类中调用公共方法?

我有这两个类交互,我试图从第一类调用四个不同的类用于第二类。 这些方法是公共的,它们确实返回值,但由于某种原因,没有建立连接。 我尝试时得到的错误是: “An object reference is required for the nonstatic field, method, or property ‘GradeBook.[method I want called]'” 我已将所有内容初始化。 我不想将方法创建为静态。 我再次阅读了我的任务的细节,我甚至不应该这样,但我似乎无法让这个工作无论如何我说出来。 myGradeBook。[方法] GraceBook。[方法] 这似乎都会造成错误。 目前的错误: The best overloaded method match or ‘System.Console.WriteLine(string, object)’ has some invalid arguments. Arugment ‘2’: cannot convert from ‘method group’ to ‘object’ 我甚至不是那些意味着什么…… 编辑:我刚刚解决了这个问题,这要归功于Visual Studio的Step Intofunction。 我不知道为什么花了这么长时间才使用它。

在Visual Studio for C#中从流畅的接口类intellisense隐藏GetHashCode / Equals / ToString?

我有一个流畅的IoC容器注册过程接口,其中包含一些用于构建注册的类。 例如,我可以这样做: builder.Register().From.ConcreteType(); 但是,在点之后的每个步骤中,会弹出intellisense,显示Object类,GetHashCode,Equals,GetType和ToString中的四种标准方法。 我尝试在几个类中重写这些方法,将EditorBrowsableAttribute属性附加到每个类,但它们仍然显示。 我没办法隐藏它们吗? 请注意,我不是试图将它们隐藏在类本身之外,只是来自intellisense。 基本上,我喜欢这个: +—————+ builder.Register().|As | |By | |Equals | <– remove this |From | |GetHashCode | <– and this |GetType | <– as well as this |ToString | <– and finally this +—————+ 这是我在Register返回的类中尝试的: [EditorBrowsable(EditorBrowsableState.Never)] public override Boolean Equals(Object obj) { return base.Equals(obj); } [EditorBrowsable(EditorBrowsableState.Never)] public override Int32 GetHashCode() […]