क्यों पीछे कोड में बनाई गई वस्तु एएसपीएक्स पेज में उपलब्ध नहीं है?

मेरा एक साधारण सवाल है। जब हम कोड ("। Aspx.cs") के पीछे कोड में कोई ऑब्जेक्ट बनाते हैं, तो यह एएसपीएक्स पेज में क्यों उपलब्ध नहीं है।

उदाहरण के लिए, यदि मेरे पास एक वर्ग है (किसी अन्य .cs फ़ाइल में मौजूद है और कोड के पीछे नहीं है) और उस वर्ग में मेरे पास एक संपत्ति घोषित की गई है, तो "नाम" कहें।

namespace BLL.SO
{
    public class SOPriceList
    {
        private string _name;
        public string Name
        {
            get { return _name;}
            set { _name = value; }
        }
    }
}

अब जब मैं कोई ऑब्जेक्ट बनाता हूं, तो आंशिक वर्ग के दायरे के साथ कोड ("। Aspx.cs") के पीछे "obj" कहें।

namespace Modules.SO
{    
    public partial class PriceListRecordView : PageBase
    {
        SOPriceList obj = new SOPriceList();

        protected void Page_Load(object sender, EventArgs e)
        {

        }
    }
}

इस ऑब्जेक्ट का उपयोग "obj" मैं संपत्ति तक पहुंच सकता हूं। तो मैं इस तरह से एएसपीएक्स पेज में संपत्ति प्राप्त करने के लिए एक ही ऑब्जेक्ट "obj" का उपयोग क्यों नहीं कर सकता,

<%= obj.Name%>
0
जोड़ा संपादित
विचारों: 1

1 उत्तर

अब जब मैं कोई ऑब्जेक्ट बनाता हूं, तो कोड में "obj" कहें   पीछे ("। aspx.cs"), इस ऑब्जेक्ट का उपयोग करके "obj" मैं संपत्ति का उपयोग कर सकता हूं

यह स्पष्ट नहीं है कि आपने यह obj उदाहरण कैसे बनाया है। यदि यह पीछे के कोड में किसी विधि के अंदर कुछ स्थानीय चर है, तो यह स्पष्ट है कि इस चर का दायरा विधि ही है ताकि आप इसे एएसपीएक्स पृष्ठ में एक्सेस न कर सकें।

एएसपीएक्स पेज में आप केवल मौजूदा वेबफॉर्म के सदस्यों तक पहुंच सकते हैं जिन्हें कोड के पीछे परिभाषित किया गया है। तो यह obj कहीं तत्काल होना चाहिए। उदाहरण के लिए आप अपने कोड में एक संपत्ति के पीछे हो सकता है:

protected SomeType MyObj
{
    get 
    {
        return ... some instance
    }
}

और फिर एएसपीएक्स पेज में आप इसे एक्सेस कर सकते हैं:

<%= MyObj.Name %>

आइए एक और उदाहरण लें जो आपको संपत्ति को आरंभ करने की अनुमति देता है उदाहरण के लिए पेज_ लोड ईवेंट में:

protected SomeType MyObj { get; private set; }

protected void Page_Load(object sender, EventArgs e)
{
    MyObj = new SomeType();
}
0
जोड़ा
ऑब्जेक्ट "ओबीजे" में आंशिक वर्ग के भीतर, कोड के पीछे और किसी भी फ़ंक्शन के अंदर नहीं है।
जोड़ा लेखक Bibhu, स्रोत
@ डारिन डिमिट्रोव - मेरा प्रश्न अपडेट किया गया।
जोड़ा लेखक Bibhu, स्रोत
@ डारिन डिमिट्रोव - धन्यवाद, यह काम करता है :)। मैं और अधिक सवाल मैंने कोशिश की, इसे सार्वजनिक रूप से (जिज्ञासा से बाहर) बनाकर, लेकिन यह काम नहीं किया, क्या आप इसे मुझे समझा सकते हैं।
जोड़ा लेखक Bibhu, स्रोत
@ डारिन डिमिट्रोव - ओह हाँ। यह काम कर रहा है, एक मूर्ख गलती की। आपके लिए बहुत से धन्यवाद, आपसे बहुत कुछ सीखा। :)
जोड़ा लेखक Bibhu, स्रोत
@ बिबू: यहां कुंजी संरक्षित है, आप व्युत्पन्न कक्षा में निजी सदस्यों तक नहीं पहुंच सकते हैं।
जोड़ा लेखक leppie, स्रोत
क्या आप दिखा सकते हैं कि यह कोड <�कोड> obj आपके कोड में परिभाषित है कि यह फ़ंक्शन के अंदर नहीं है? आपके पास संपत्ति या कुछ है? इसकी दृश्यता क्या है?
जोड़ा लेखक Darin Dimitrov, स्रोत
धन्यवाद। अब यह स्पष्ट है। आपका obj चर निजी है इसलिए आप इसे एएसपीएक्स पेज में एक्सेस नहीं कर सकते हैं। इसे संरक्षित करें: संरक्षित SOPriceList obj = new SOPriceList (); । आप शायद पूछ सकते हैं: लेकिन obj निजी क्यों है? और जवाब इसलिए है क्योंकि जब आप कक्षा में फ़ील्ड घोषित करते समय दृश्यता संशोधक निर्दिष्ट नहीं करते हैं तो सी # कंपाइलर निजी मानता है।
जोड़ा लेखक Darin Dimitrov, स्रोत
public काम करना चाहिए। संरक्षित की तुलना में इसमें अधिक दृश्यता स्तर भी है। जब आप कहते हैं यह काम नहीं करता क्या आप थोड़ा और विशिष्ट हो सकते हैं? क्या काम नहीं किया? क्या आपको एक त्रुटि संदेश मिला? यदि हां, तो आपको क्या त्रुटि संदेश मिला?
जोड़ा लेखक Darin Dimitrov, स्रोत