相关疑难解决方法(0)

如何从Java中的不同类读取私有字段的值?

我在第三方设计的设计很差JAR,我需要访问其中一个私有字段.例如,为什么我需要选择私人领域是否有必要?

class IWasDesignedPoorly {
    private Hashtable stuffIWant;
}

IWasDesignedPoorly obj = ...;
Run Code Online (Sandbox Code Playgroud)

我如何使用反射来获得价值stuffIWant

java reflection field private class

466
推荐指数
7
解决办法
27万
查看次数

单元测试和检查私有变量值

我正在用C#,NUnit和Rhino Mocks编写单元测试.以下是我正在测试的类的相关部分:

public class ClassToBeTested
{
    private IList<object> insertItems = new List<object>();

    public bool OnSave(object entity, object id)
    {
        var auditable = entity as IAuditable;
        if (auditable != null) insertItems.Add(entity);

        return false;            
    }
}
Run Code Online (Sandbox Code Playgroud)

我想在调用OnSave后测试insertItems中的值:

[Test]
public void OnSave_Adds_Object_To_InsertItems_Array()
{
     Setup();

     myClassToBeTested.OnSave(auditableObject, null);

     // Check auditableObject has been added to insertItems array            
}
Run Code Online (Sandbox Code Playgroud)

这是什么最好的做法?我曾考虑将insertItems作为一个带有公共get的Property添加,或者将List注入ClassToBeTested,但不确定我是否应该修改代码以进行测试.

我已经阅读了许多关于测试私有方法和重构的帖子,但这是一个非常简单的类,我想知道什么是最好的选择.

c# nunit unit-testing

48
推荐指数
2
解决办法
5万
查看次数

如何在C#中获取私有字段的值?

我遇到了一个问题,我需要访问一个类的私有字段.例如:

class MyClass 
{
    private string someString;

    public MyClass( string someStringValue )
    {
        someString = someStringValue;
    }
}
Run Code Online (Sandbox Code Playgroud)

如何在MyClass之外获取someString的值?

更新:

对不起,我不能在这里使用属性,因为实际的生产代码是受保护的.我是一名质量保证/开发人员,我需要一种方法让那些私人用于编写用户验收测试.所以我无法改变生产代码.你能帮我吗?

c#

46
推荐指数
4
解决办法
4万
查看次数

设置私有字段的值

为什么以下代码不起作用:

class Program
{
    static void Main ( string[ ] args )
    {
        SomeClass s = new SomeClass( );

        s.GetType( ).GetField( "id" , System.Reflection.BindingFlags.NonPublic ) // sorry reasently updated to GetField from GetProperty...
            .SetValue( s , "new value" );
    }
}


class SomeClass
{
    object id;

    public object Id 
    {
        get
        {
            return id;
        }
    }   
}
Run Code Online (Sandbox Code Playgroud)

我试图设置私有字段的值.


这是我得到的例外:

System.NullReferenceException未处理Message = Object引用未设置为对象的实例.来源= ConsoleApplication7
StackTrace:位于C:\ Users\Antonio\Desktop\ConsoleApplication7\ConsoleApplication7\Program.cs中的Program.Main(String [] args):位于System的System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly,String [] args)的第18行. System.Threading.ExecutionContext.Run上的System.Threading.ThreadHelper.ThreadStart_Context(Object state)中的Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()中的AppDomain.ExecuteAssembly(String assemblyFile,Evidence assemblySecurity,String [] args)(ExecutionContext executionContext System.Threading.ThreadHelper.ThreadStart()中的System.Threading.ExecutionContext.Run(ExecutionContext executionContext,ContextCallback回调,对象状态),ContextExallback回调,对象状态,布尔值ignoreSyncCtx:InnerException:

c# reflection

30
推荐指数
1
解决办法
3万
查看次数

访问私有字段

是否可以获取或设置私有字段?

我想得到System.Guid.c.有没有办法访问它或者我应该从strut复制代码并将字段公开?

.net c# private

18
推荐指数
3
解决办法
2万
查看次数

使用Compact Framework在数据网格中设置列宽

我正在尝试设置数据网格中列的宽度.我使用Compact Framework 2.0和C#

我试过这个,但它给了我一个"out of bonds"错误信息:

foreach (DataGridColumnStyle vColumnStyle in dataGrid1.TableStyles[0].GridColumnStyles)
{
    vColumnStyle.Width = 100;
}
Run Code Online (Sandbox Code Playgroud)

以下是使用数据表填充数据网格的代码(仅在我尝试设置列宽时失败):

void FillData()
{
    // 1
    // Open connection
    string conString = "Data Source=\\Program Files\\smartdeviceproject2\\repartocrack.sdf";
    using (SqlCeConnection c = new SqlCeConnection(conString))
    {
        c.Open();
        // 2
        // Create new DataAdapter
        using (SqlCeDataAdapter a = new SqlCeDataAdapter(
        "SELECT codbultocomp, nombre, estado FROM envios INNER JOIN tiendas ON envios.codigodestino = tiendas.codigodestino", c))
        {
            // 3
            // Use DataAdapter to fill DataTable
            DataTable t = new DataTable();
            a.Fill(t); …
Run Code Online (Sandbox Code Playgroud)

c# datatable datagrid compact-framework visual-studio-2008

8
推荐指数
1
解决办法
2万
查看次数

用反射得到领域

我想得到所有具有空值的字段,但我甚至得到任何字段:

  [Serializable()]
public class BaseClass
{
    [OnDeserialized()]
    internal void OnDeserializedMethod(StreamingContext context)
    {
        FixNullString(this);
    }

    public void FixNullString(object type)
    {
        try
        {
            var properties = type.GetType().GetFields();


            foreach (var property in from property in properties
                                     let oldValue = property.GetValue(type)
                                     where oldValue == null
                                     select property)
            {
                property.SetValue(type, GetDefaultValue(property));
            }
        }
        catch (Exception)
        {

        }
    }

    public object GetDefaultValue(System.Reflection.FieldInfo value)
    {
        try
        {
            if (value.FieldType == typeof(string))
                return "";

            if (value.FieldType == typeof(bool))
                return false;

            if (value.FieldType == typeof(int))
                return 0;

            if (value.FieldType …
Run Code Online (Sandbox Code Playgroud)

c# reflection class

7
推荐指数
1
解决办法
2万
查看次数

访问修饰符也会影响反射吗?

我一直相信他们做到了,但在这里看到一些答案让我怀疑......

我可以通过反射从类外部访问私有字段/属性/方法吗?

.net reflection access-modifiers

6
推荐指数
1
解决办法
566
查看次数

由于反映安全问题,是否访问私有字段和属性?

我刚刚在这里发现,由于反射,可以(至少在c#中)查找私有字段和属性.

我很惊讶,虽然我知道像DataContractSerializer类这样的构造需要访问它们的可能性.

现在的问题是,如果有人可以访问我班级的每个领域,这有点不安全,不是吗?我的意思是如果有人有一个private bool _isLicensed领域.它可以很容易地改变!

后来我在这里发现,字段访问器并不是一种安全机制.

那么如何让我的应用程序安全,这意味着我如何阻止除我以外的任何人改变我的类中的基本状态值?

.net c# security reflection

4
推荐指数
2
解决办法
429
查看次数

如何使用反射对Dispose()进行单元测试?

我想为实现IDisposable的类编写单元测试.该类有许多私有字段,也实现IDisposable.在我的测试中,我想验证当我调用时Dispose(),它正确调用Dispose()其所有IDisposable字段.基本上,我希望我的单元测试看起来像这样:

var o = new ObjectUnderTest();
o.Dispose();
Assert.IsFalse(ObjectHasUndisposedDisposables(o));
Run Code Online (Sandbox Code Playgroud)

我正在考虑使用反射来实现这一目标.看起来这是一个相当普遍的要求,但我找不到它的任何例子.

有人试过吗?

编辑 - 我不想将Disposables注入被测试的类中.

c# reflection unit-testing assert dispose

3
推荐指数
2
解决办法
2553
查看次数

SharePoint 2010,使用C#进行反射

如此线程中所述,使用Reflection查找私有字段?反射可用于设置私有字段,我已经在使用asp.net 2.0的MOSS 2007中成功完成了.我想知道我的代码是否会在SharePoint 2010中破解,我想这取决于asp.net的支持版本asp.net 3.5是否会允许它.

总结 asp.net 3.5是否允许使用继承类的反射来设置超类的私有成员变量?

任何意见?

c# reflection .net-3.5 sharepoint-2010

1
推荐指数
1
解决办法
463
查看次数